do
List2
Done
В отличие от предыдущего случая условием выполнения команд между do и done является ненулевое значение возврата. Программный цикл может быть размещен внутри другого цикла (вложенный цикл). Оператор break прерывает ближайший к нему цикл. Если в программу ввести оператор break с уровнем 2 (break 2), то это обеспечит выход за пределы двух циклов и завершение программы.
Оператор continue передает управление ближайшему в цикле оператору while.
Оператор цикла с перечислением for:
for name in [wordlist]
do
List
Done
где name - переменная; wordlist - последовательность слов; list - список команд. Переменная name получает значение первого слова последовательности wordlist, после этого выполняется список команд, стоящий между do и done. Затем name получает значение второго слова wordlist и снова выполняется список list. Выполнение прекращается после того, как кончится список wordlist.
Ветвление по многим направлениям case. Команда case обеспечивает ветвление по многим направлениям в зависимости от значений аргументов команды. Формат:
|
|
case <string> in
s1) <list1>;;
s2) <list2>;;
.
.
.
sn) <listn>;;
*) <list>
Esac
3десь list1, list2... listn - список команд. Производится сравнение шаблона string с шаблонами s1, s2... sk... sn. При совпадении выполняется список команд, стоящий между текущим шаблоном sk и соответствующими знаками;;. Пример:
echo -n 'Please, write down your age'
Read age
case $age in
test $age -le 20) echo 'you are so young';;
test $age -le 40) echo 'you are still young';;
test $age -le 70) echo 'you are too young';;
*)echo 'Please, write down once more'
Esac
В конце текста помещена звездочка * на случай неправильного ввода числа.