Инструкции case и select технически не являются циклами, поскольку не предусматривают многократное исполнение блока кода. Однако, они, как и циклы, управляют ходом исполнения программы, в зависимости от начальных или конечных условий.
Конструкция case эквивалентна конструкции switch в языке C/C++. Она позволяет выполнять тот или иной участок кода, в зависимости от результатов проверки условий. Она является, своего рода, краткой формой записи большого количества операторов if/then/else и может быть неплохим инструментом при создании разного рода меню.
case "$variable" in
"$condition1" )
command...
;;
"$condition2" )
command...
;;
esac
![]() |
|
Пример 10-24. Использование case
Пример 10-25. Создание меню с помощью case
Очень хороший пример использования case для анализа аргументов, переданных из командной строки.
Пример 10-26. Оператор case допускает использовать подстановку команд вместо анализируемой переменной
Оператор case допускает использование шаблонных конструкций.
Пример 10-27. Простой пример сравнения строк
Пример 10-28. Проверка ввода
Оператор select был заимствован из Korn Shell, и является еще одним инструментом, используемым при создании меню.
select variable [in list]
do
command...
break
done
Этот оператор предлагает пользователю выбрать один из представленных вариантов. Примечательно, что select по-умолчанию использует в качестве приглашения к вводу (prompt) — PS3 (#? ), который легко изменить.
Пример 10-29. Создание меню с помощью select
Если в операторе select список in list не задан, то в качестве списка будет использоваться список аргументов ($@), передаваемый сценарию или функции.
Сравните это с поведением оператора цикла
for variable [in list]
в котором не задан список аргументов.Пример 10-30. Создание меню с помощью select в функции
См. так же Пример 34-3.
Последние комментарии