Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Командная оболочка раскрывает
f*.sh
Помните о том, что все подстановки переменных в сценариях командной оболочки делаются во время выполнения сценария, а не в процессе их написания, поэтому все синтаксические ошибки в объявлениях переменных обнаруживаются только на этапе выполнения, как было показано ранее, когда мы заключали в кавычки пустые переменные.
Поскольку по умолчанию командная оболочка считает все значения строками, оператор
for
Если нужно повторить выполнение последовательности команд, но заранее не известно, сколько раз следует их выполнить, вы, как правило, будете применять цикл
while
<b>while</b> <i>условие</i>
<b>do</b>
<i> операторы</i>
<b>done</b>
Далее приведен пример довольно слабой программы проверки паролей.
#!/bin/sh
echo "Enter password"
read trythis
while [ "$trythis" != "secret" ]; do
echo "Sorry, try again"
read trythis
done
exit 0
Следующие строки могут служить примером вывода данного сценария:
Enter password
<b>password</b>
Sorry, try again
<b>secret</b>
$
Ясно, что это небезопасный способ выяснения пароля, но он вполне подходит для демонстрации применения цикла
while
do
done
true
trythis
secret
$trythis
secret
done
У цикла
until
<b>until</b> <i>условие</i>
<b>do</b>
<i> операторы</i>
<b>done</b>
Она очень похожа на синтаксическую запись цикла
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
<b>case</b><i> переменная</i> <b>in</b>
<i> образец</i> [ | <i>образец</i>] ...) <i>операторы</i>;;
<i>образец</i> [ | <i>образец</i>] ...)<i> операторы</i>;;
<b>esac</b>
Конструкция оператора
case
if
elif
else
Обратите внимание на то, что каждая ветвь с образцами завершается удвоенным символом "точка с запятой" (
;;
case
case
Возможность сопоставлять многочисленные образцы и затем выполнять множественные связанные с образцом операторы делают конструкцию
case
case
Применяя конструкцию
case
*