Искусство программирования на языке сценариев командной оболочки




Программирование на языке сценариев командной оболочки - стр. 38


if [ condition-true ] then command 1 command 2 ... else # Необязательная ветка (можно опустить, если в ней нет необходимости). # Дополнительный блок кода, # исполняемый в случае, когда результат проверки -- "ложь". command 3 command 4 ... fi

Когда if и then располагаются в одной строке, то конструкция if должна завершаться точкой с запятой. И if, и then -- это зарезервированные слова. Зарезервированные слова начинают инструкцию, которая должна быть завершена прежде, чем в той же строке появится новая инструкция.

if [ -x "$filename" ]; then

Else if и elif

elif

elif -- это краткая форма записи конструкции else if. Применяется для построения многоярусных инструкций if/then.

if [ condition1 ] then command1 command2 command3 elif [ condition2 ] # То же самое, что и else if then command4 command5 else default-command fi

Конструкция if test condition-true является точным эквивалентом конструкции if [ condition-true ], где левая квадратная скобка [ выполняет те же действия, что и команда test. Закрывающая правая квадратная скобка ] не является абсолютно необходимой, однако, более новые версии Bash требуют ее наличие.

Команда test -- это встроенная команда Bash, которая выполняет проверки файлов и производит сравнение строк. Таким образом, в Bash-скриптах, команда test не вызывает внешнюю (/usr/bin/test) утилиту, которая является частью пакета sh-utils. Аналогично, [ не производит вызов утилиты /usr/bin/[, которая является символической ссылкой на /usr/bin/test.

bash$ type test

test is a shell builtin

bash$ type '['

[ is a shell builtin

bash$ type '[['

[[ is a shell keyword

bash$ type ']]'

]] is a shell keyword

bash$ type ']'

bash: type: ]: not found

Пример 7-2. Эквиваленты команды test -- /usr/bin/test, [ ], и /usr/bin/[

#!/bin/bash

echo

if test -z "$1" then echo "Аргументы командной строки отсутствуют." else echo "Первый аргумент командной строки: $1." fi

echo

if /usr/bin/test -z "$1" # Дает тот же рузультат, что и встроенная команда "test".


Содержание  Назад  Вперед