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