Операторы 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 - Ожидает окончания дочернего процесса и сообщает о его завершении