Операторы bash
Условный оператор if/elif/else
Синтаксис:
if [ x != 10 ]
then
action
elif [ x != 12 ]
then
action
else
action
fi
if ! grep -r name /home
then
echo 'Ничего не найдено в папке /home'
elif grep -r name /var
then
c
else
echo 'Ничего не найдено в папке /home'
fi
Условный оператор if проверяет код завершения любой команды, а не только
результат выражения, заключенного в квадратные скобки.
null ":" - всегда возвращает "истина" если нужно оcтавить незаполненным части оператора if
if cmp a b &> /dev/null # Подавление вывода.
f [ $condition1 ] && [ $condition2 ]
# То же самое, что: if [ $condition1 -a $condition2 ]
# Возвращает true если оба операнда condition1 и condition2 истинны..
Эта конструкция работает так же, как в других языках программирования.
Сначала выполняются команды из списка1 . Если этот список выполнен
успешно, то есть с кодом завершения 0, то выполняется список2, если
нет — то список, стоящий после очередного elif. При невозможности
выполнить список команд, стоящий после очередного then, выполняется
список, стоящий после else.
Можно использовать сокращенный вариант, только if-then-fi:
$ if [ $? -ne 0 ] ; then echo "Ошибка. Смотри протокол"; fi;
Условные операторы case
case значение in
шаблон1)
список1
;;
шаблон2|шаблонЗ)
список2
;;
esac
case "$Keypress" in
[a-z])
echo "буква в нижнем регистре"
;;
[A-Z])
echo "Буква в верхнем регистре"
;;
[0-9])
echo "Цифра"
;;
*)
echo "Знак пунктуации, пробел или что-то другое"
;;
esac
Допускается указывать диапазоны символов в [квадратных скобках].
Ищется первый шаблон, совпадающий со значением. Если он найден, то выполняется соответствующий ему список команд, завершенный двумя символами «;». Шаблон и список разделяются символом «)». Одному списку команд может соответствовать несколько шаблонов, тогда они разделяются символом «|».
Оператор цикла с перечислением for
Синтаксис:
for переменная [in шаблон]
do
список
done
Примеры:
for i in {1..5}
do
echo "Welcom $i times"
done
for i in {0..10..2}
do
echo "Welcom $i times"
done
for I in {1..10}; do echo $I; done
for I in 1 2 3 4 5 6 7 8 9 10; do echo $I; done
for I in $(seq 1 10); do echo $I; done
for ((I=1; I <= 10 ; I++)); do echo $I; done
for ((I=1; I <= 29 ; I++)); do
echo `printf "node%02d\n" $I`;
done
В результате подстановки шаблона получается список слов. Переменная
получает значение первого слова из этого списка, и выполняется список
команд, стоящий между do и done. Затем переменная получает значение
очередного слова из списка слов, и снова выполняется список команд.
Повторение прекращается по исчерпании слов в списке. Отсутствие
конструкции [in шаблон] эквивалентно записи in $@
Оператор цикла с условием while
Синтаксис:
while список1
do
список2
done
Оператор выполняет список1 и в случае его успешного завершения (нулевого кода возврата) — список2.
Процедура повторяется до тех пор, пока результат выполнения списка1 не станет ненулевым
Оператор цикла с инверсным условием until
Синтаксис:
until СПИСОК1
do
список2
done
Оператор выполняет список1 и, если он выполнен неуспешно (код возврата ненулевой),
то выполняет список2. Процедура повторяется до техпор, пока результат выполнения списка1 не станет нулевым.
Оператор цикла с выбором select
Синтаксис:
select переменная [in шаблон]
do
список
done
В результате подстановки шаблона получается список слов. К этим словам
оператор добавляет порядковые номера и выводит весь набор в стандартный
поток ошибок (stderr).
Если шаблон опущен, то вместо него используется список позиционных параметров $@.
После этого оболочка выводит приглашение и считывает строку из стандартного потока ввода (stdin).
Если строка содержит номер, соответствующий какому-либо слову из списка, то переменная получает это слово в качестве значения.
Если в строке подходящего номера нет, то значением переменной становится пустая строка.
После этого выполняется список команд, и процедура повторяется до тех пор, пока в строке ввода не встретится символ конца файла (введите Ctrl+D)
или пока в списке команд не встретится команда break или return.
Функции
Оператор определения функции имеет следующий синтаксис:
[function] имя()
{
список
}
Определять функцию можно в любом месте сценария, но вызов ее должен осуществляться строго после описания.
Вызывается функция подобно любой команде — по имени.
Переданные ей аргументы в теле функции рассматриваются как позиционные параметры, причем в вызывающем
сценарии значения позиционных параметров не меняются. Значение позиционного параметра 0 — это имя функции.
- break - выход из цикла for, while, until
- return - выход из функции с отображением кода возврата
- continue -выполнение следующей интеграции цикла for, while, until
Команда continue, как и команда break, может иметь необязательный параметр. В простейшем случае, команда continue передает управление в начало текущего цикла, а команда continue N прерывает исполнение текущего цикла и передает управление в начало внешнего цикла, отстоящего от текущего на N уровней (причем 1-й уровень -- это уровень текущего цикла, прим. перев.). - shift - перемещение позиционного параметра налево
- getopts - несколько аргументо в командной строке ( usage -h - f, usage -hf)
- exec - Выполняет команду , но не в этом shelle
- ulimit - отображает или устанавливает ресурсы для интерпретатора shell
- wait - Ожидает окончания дочернего процесса и сообщает о его завершении