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