Вас могли заинтересовать непонятные биты set-group-id и set-user-id (также называемые set-gid и set-uid). Бит set-uid предоставляет программе права владельца, а не просто ее пользователя, бит set-gid предоставляет программе права группы. Эти биты устанавливаются командой
chmodsgМы немного сами себя обогнали, но далее следует пример тестирования состояния файла /bin/bash, так что вы сможете увидеть, как это выглядит на практике.
#!/bin/shif [ -f /bin/bash ]then echo "file /bin/bash exists"fiif [ -d /bin/bash ]then echo "/bin/bash is a directory"else echo "/bin/bash is NOT a directory"fiДля того чтобы тест мог оказаться истинным, предварительно, для проверки всех файловых флагов требуется наличие файла. Данный перечень включает только самые широко используемые опции команды
testtesthelp testТеперь, когда вы познакомились с условиями, можно рассмотреть управляющие структуры, использующие эти условия.
Управляющие структуры
В командной оболочке есть ряд управляющих структур или конструкций, похожих на аналогичные структуры в других языках программирования.
В следующих разделах элемент синтаксической записи операторы — это последовательности команд, которые выполняются, когда или пока условие удовлетворяется или пока оно не удовлетворяется.
Управляющий оператор
ifусловия<b>if</b> <i>условие</i><b>then</b><i> операторы</i><b>else</b><i> операторы</i><b>fi</b>Наиболее часто оператор
if#!/bin/shecho "Is it morning? Please answer yes or no "read timeofdayif [ $timeofday = "yes" ]; then echo "Good morning"else echo "Good afternoon"fiexit 0В результате будет получен следующий вывод на экран:
Is it morning? Please answer yes or no<b>yes</b>Good morning$В этом сценарии для проверки содержимого переменной
timeofday[ifОбратите внимание на дополнительные пробелы, используемые для формирования отступа внутри оператора
ifК сожалению, с этим простым сценарием связано несколько проблем. Во-первых, он принимает в значении
noyeselifelseifelifВы можете откорректировать предыдущий сценарий так, чтобы он выводил сообщение об ошибке, если пользователь вводит что-либо отличное от
yesnoelseelif#!/bin/shecho "Is it morning? Please answer yes or no "read timeofdayif [ $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>fiexit 0Как это работает
Этот пример очень похож на предыдущий, но теперь, если первое условие не равно
trueelif