Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
Вас могли заинтересовать непонятные биты set-group-id и set-user-id (также называемые set-gid и set-uid). Бит set-uid предоставляет программе права владельца, а не просто ее пользователя, бит set-gid предоставляет программе права группы. Эти биты устанавливаются командой
chmod
s
g
Мы немного сами себя обогнали, но далее следует пример тестирования состояния файла /bin/bash, так что вы сможете увидеть, как это выглядит на практике.
#!/bin/sh
if [ -f /bin/bash ]
then
echo "file /bin/bash exists"
fi
if [ -d /bin/bash ]
then
echo "/bin/bash is a directory"
else
echo "/bin/bash is NOT a directory"
fi
Для того чтобы тест мог оказаться истинным, предварительно, для проверки всех файловых флагов требуется наличие файла. Данный перечень включает только самые широко используемые опции команды
test
test
help test
Теперь, когда вы познакомились с условиями, можно рассмотреть управляющие структуры, использующие эти условия.
Управляющие структуры
В командной оболочке есть ряд управляющих структур или конструкций, похожих на аналогичные структуры в других языках программирования.
В следующих разделах элемент синтаксической записи операторы — это последовательности команд, которые выполняются, когда или пока условие удовлетворяется или пока оно не удовлетворяется.
Управляющий оператор
if
условия
<b>if</b> <i>условие</i>
<b>then</b>
<i> операторы</i>
<b>else</b>
<i> операторы</i>
<b>fi</b>
Наиболее часто оператор
if
#!/bin/sh
echo "Is it morning? Please answer yes or no "
read timeofday
if [ $timeofday = "yes" ]; then
echo "Good morning"
else
echo "Good afternoon"
fi
exit 0
В результате будет получен следующий вывод на экран:
Is it morning? Please answer yes or no
<b>yes</b>
Good morning
$
В этом сценарии для проверки содержимого переменной
timeofday
[
if
Обратите внимание на дополнительные пробелы, используемые для формирования отступа внутри оператора
if
К сожалению, с этим простым сценарием связано несколько проблем. Во-первых, он принимает в значении
no
yes
elif
else
if
elif
Вы можете откорректировать предыдущий сценарий так, чтобы он выводил сообщение об ошибке, если пользователь вводит что-либо отличное от
yes
no
else
elif
#!/bin/sh
echo "Is it morning? Please answer yes or no "
read timeofday
if [ $timeofday = "yes" ]
then
echo "Good morning"
<i>elif [ $timeofday = "no" ]; then</i>
<i> echo "Good afternoon"</i>
<i>else</i>
<i> echo "Sorry, $timeofday not recognized. Enter yes or no "</i>
<i> exit 1</i>
fi
exit 0
Как это работает
Этот пример очень похож на предыдущий, но теперь, если первое условие не равно
true
elif