Командная оболочка раскрывает
f*.shПомните о том, что все подстановки переменных в сценариях командной оболочки делаются во время выполнения сценария, а не в процессе их написания, поэтому все синтаксические ошибки в объявлениях переменных обнаруживаются только на этапе выполнения, как было показано ранее, когда мы заключали в кавычки пустые переменные.
Поскольку по умолчанию командная оболочка считает все значения строками, оператор
forЕсли нужно повторить выполнение последовательности команд, но заранее не известно, сколько раз следует их выполнить, вы, как правило, будете применять цикл
while<b>while</b> <i>условие</i><b>do</b> <i> операторы</i><b>done</b> Далее приведен пример довольно слабой программы проверки паролей.
#!/bin/shecho "Enter password"read trythiswhile [ "$trythis" != "secret" ]; do echo "Sorry, try again" read trythisdoneexit 0Следующие строки могут служить примером вывода данного сценария:
Enter password<b>password</b>Sorry, try again<b>secret</b>$Ясно, что это небезопасный способ выяснения пароля, но он вполне подходит для демонстрации применения цикла
whiledodonetruetrythissecret$trythissecretdoneУ цикла
until<b>until</b> <i>условие</i><b>do</b><i> операторы</i><b>done</b>Она очень похожа на синтаксическую запись цикла
whileусловиеКак правило, если нужно выполнить цикл хотя бы один раз, применяют цикл
whileuntilКак пример цикла
until#!/bin/bashuntil who | grep "$1" > /dev/nulldo sleep 60done# Теперь звонит колокольчик и извещает о новом пользователеecho -е '\а'echo "**** $1 has just logged in ****"exit 0Если пользователь уже зарегистрировался в системе, выполнять цикл нет необходимости. Поэтому естественно выбрать цикл
untilwhileОператор
case<b>case</b><i> переменная</i> <b>in</b><i> образец</i> [ | <i>образец</i>] ...) <i>операторы</i>;; <i>образец</i> [ | <i>образец</i>] ...)<i> операторы</i>;;<b>esac</b>Конструкция оператора
caseifelifelseОбратите внимание на то, что каждая ветвь с образцами завершается удвоенным символом "точка с запятой" (
;;casecaseВозможность сопоставлять многочисленные образцы и затем выполнять множественные связанные с образцом операторы делают конструкцию
casecaseПрименяя конструкцию
case*