Краткий свод управляющих конструкций языка программирования bash.
Во всех управляющих конструкциях в качестве логического значения используется код возврата из программы, указанной в качестве условия. Код возврата 0 – истина, любое другое значение – ложь. Программа true – всегда завершается с кодом 0, false – всегда завершается с кодом 1. Команда test (она же [...] ) вычисляет код ответа на основе выражения, переданного через параметры командной строки.
Конструкции могут быть записаны в несколько строк, или в одну с использованием разделителя ";".
Последовательности команд. Возвращают код ответа последней выполненной команды.
; - оператор безусловного последовательного выполнения команд
&& оператор И. Правая часть не выполняется если левая выполнилась неуспешно.
|| оператор ИЛИ. Правая часть не выполняется если левая выполнилась успешно.
Оператор if – условное выполнение.
if cmd
then
command...
else
command...
fi
Запись в одну строку
if cmd ; then command1;command2…;else command3;command4…;fi
Цикл while выполняется, пока команда условие возвращает 0
while condition-is-true
do
command...
done
Запись в одну строку
while cmd; do command1; command2;done
Пример с использованием встроенной функцией test
VAR0=0; LIMIT=10
while [ "${VAR0}" -lt "${LIMIT}" ];do
echo -n "${VAR0} " # -n подавляет перевод строки
VAR0=`expr ${VAR0} + 1`
done
Пример в сочетании c арифметической подстановкой
a=1
while (( a <= LIMIT )) ; do # В (()) $ не нужен
echo -n "$a "
((a += 1)) # В арифметической подстановке есть оператор +=
done
Пример с командой read, которая read читает строки из стандартного ввода. read разбивает строку на слова и сохраняет их в указанных переменных. Если переменные не заданы, то read сохраняет всю строку в переменной REPLY. Если необходимо читать посимвольно, то команде read можно указать опцию -n 1
while read; do
echo $REPLY
done < file.txt
Цикл until аналогичен while, но выполняется пока команда завершается с ненулевым кодом возврата
until condition-is-true; do
command...
done
Цикл for выполняется путем последовательной подстановки в переменную цикла значений из списка
for ARG in LIST; do
command...
done
Простая форма
for ARG in "$VAR1" "$VAR2" "$VAR3" ; do
echo $ARG
done
В сочетании с подстановкой имен файлов по шаблону
for FILE in [ab]*; do
echo "$FILE" # В отличие от echo [ab]*, имена печатаются в отдельных строках
done
В сочетании с арифметической подстановкой
LIMIT=5
for ((a=1; a <= LIMIT ; a++)); do # $ не нужен ни перед скобками ни перед именами переменных
echo -n "$a "
done
В сочетании с программой seq
LIMIT=5
for ARG in `seq 1 $LIMIT`;do
echo -n "$ARG "
done
Оператор case выбор одного из вариантов в соответствии со значением аргумента
case "$VARiable" in
"$condition1" )
command...
;;
"$condition2" )
command...
;;
esac