Читать интересную книгу Основы программирования в Linux - Мэтью Нейл

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 15 16 17 18 19 20 21 22 23 ... 324
Примечание

Вас могли заинтересовать непонятные биты set-group-id и set-user-id (также называемые set-gid и set-uid). Бит set-uid предоставляет программе права владельца, а не просто ее пользователя, бит set-gid предоставляет программе права группы. Эти биты устанавливаются командой chmod с помощью опций s и g. На файлы, содержащие сценарии, флаги set-gid и set-uid не влияют, они оказывают влияние только на исполняемые двоичные файлы.

Мы немного сами себя обогнали, но далее следует пример тестирования состояния файла /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, полный список можно найти в интерактивном справочном руководстве. Если вы применяете оболочку bash, в которую встроена команда test, используйте команду help test для получения дополнительных сведений. Позже в этой главе мы применим некоторые из этих опций.

Теперь, когда вы познакомились с условиями, можно рассмотреть управляющие структуры, использующие эти условия.

Управляющие структуры

В командной оболочке есть ряд управляющих структур или конструкций, похожих на аналогичные структуры в других языках программирования.

Примечание

В следующих разделах элемент синтаксической записи операторы — это последовательности команд, которые выполняются, когда или пока условие удовлетворяется или пока оно не удовлетворяется. 

if

Управляющий оператор if очень прост: он проверяет результат выполнения команды и затем в зависимости от условия выполняет ту или иную группу операторов.

<b>if</b> <i>условие</i>

<b>then</b>

<i> операторы</i>

<b>else</b>

<i> операторы</i>

<b>fi</b>

Наиболее часто оператор if применяется, когда задается вопрос, и решение принимается в зависимости от ответа:

#!/bin/sh

echo &quot;Is it morning? Please answer yes or no &quot;

read timeofday

if [ $timeofday = &quot;yes&quot; ]; then

 echo &quot;Good morning&quot;

else

 echo &quot;Good afternoon&quot;

fi

exit 0

В результате будет получен следующий вывод на экран:

Is it morning? Please answer yes or no

<b>yes</b>

Good morning

$

В этом сценарии для проверки содержимого переменной timeofday применяется команда [. Результат оценивается оператором командной оболочки if, который затем разрешает выполнять разные строки программного кода.

Примечание

Обратите внимание на дополнительные пробелы, используемые для формирования отступа внутри оператора if. Это делается только для удобства читателя; командная оболочка игнорирует дополнительные пробелы.

elif

К сожалению, с этим простым сценарием связано несколько проблем. Во-первых, он принимает в значении no (нет) любой ответ за исключением yes (да). Можно помешать этому, воспользовавшись конструкцией elif, которая позволяет добавить второе условие, проверяемое при выполнении части else оператора if (упражнение 2.3). 

Упражнение 2.3. Выполнение проверок с помощью elif

Вы можете откорректировать предыдущий сценарий так, чтобы он выводил сообщение об ошибке, если пользователь вводит что-либо отличное от yes или no. Для этого замените ветку else веткой elif и добавьте еще одно условие:

#!/bin/sh

echo &quot;Is it morning? Please answer yes or no &quot;

read timeofday

if [ $timeofday = &quot;yes&quot; ]

then

 echo &quot;Good morning&quot;

<i>elif [ $timeofday = &quot;no&quot; ]; then</i>

<i> echo &quot;Good afternoon&quot;</i>

<i>else</i>

<i> echo &quot;Sorry, $timeofday not recognized. Enter yes or no &quot;</i>

<i> exit 1</i>

fi

exit 0

Как это работает

Этот пример очень похож на предыдущий, но теперь, если первое условие не равно true, оператор командной оболочки elif проверяет переменную снова. Если обе проверки не удачны, выводится сообщение об ошибке, и сценарий завершается со значением 1, которое в вызывающей программе можно использовать для проверки успешного выполнения сценария.

1 ... 15 16 17 18 19 20 21 22 23 ... 324
На этом сайте Вы можете читать книги онлайн бесплатно русская версия Основы программирования в Linux - Мэтью Нейл.

Оставить комментарий