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
условия
if
then
else
fi
Наиболее часто оператор 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
yes
Good morning
$
В этом сценарии для проверки содержимого переменной timeofday
[
. Результат оценивается оператором командной оболочки if
, который затем разрешает выполнять разные строки программного кода.Обратите внимание на дополнительные пробелы, используемые для формирования отступа внутри оператора if
К сожалению, с этим простым сценарием связано несколько проблем. Во-первых, он принимает в значении no
yes
(да). Можно помешать этому, воспользовавшись конструкцией elif
, которая позволяет добавить второе условие, проверяемое при выполнении части else
оператора if
(упражнение 2.3). 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"
fi
exit 0
Как это работает
Этот пример очень похож на предыдущий, но теперь, если первое условие не равно true
elif
проверяет переменную снова. Если обе проверки не удачны, выводится сообщение об ошибке, и сценарий завершается со значением 1, которое в вызывающей программе можно использовать для проверки успешного выполнения сценария.Данный сценарий исправляет наиболее очевидный дефект, а более тонкая проблема остается незамеченной. Запустите новый вариант сценария, но вместо ответа на вопрос просто нажмите клавишу
[: =: unary operator expected
Что же не так? Проблема в первой ветви оператора if
timeofday
, она состояла из пустой строки. Следовательно, ветвь оператора if
выглядела следующим образом: