Введение
Объявления case в Bash обычно используются для упрощения сложных условий, когда у вас есть несколько вариантов. Использование оператора case вместо вложенных операторов if поможет вам сделать ваши bash-скрипты более читабельными и простыми в управлении.
Оператор case Bash имеет ту же концепцию, что и оператор switch Javascript или C. Основное отличие состоит в том, что, в отличие от оператора switch C, оператор Case Bash не продолжает поиск соответствия шаблону после того, как он найден и выполнен.
В этом руководстве мы рассмотрим основы объявлений Case Bash и покажем, как использовать их в сценариях оболочки.
Синтаксис оператора case
Оператор Case Bash имеет следующую форму:
case EXPRESSION in
PATTERN_1)
STATEMENTS
;;
PATTERN_2)
STATEMENTS
;;
PATTERN_N)
STATEMENTS
;;
*)
STATEMENTS
;;
esac
- Каждый оператор Case начинается с ключевого слова
case
, за которым следует выражение Case и ключевое словоin
. Оператор заканчивается ключевым словомesac
. - Вы можете использовать несколько условий, разделенных оператором
|
. Оператор)
завершает список шаблонов. - Шаблон может содержатьспециальные символы.
- Шаблон и связанные с ним команды известны как предложения.
- Каждое предложение должно быть разрешено с помощью
;;
. - Выполняются команды, соответствующие первому шаблону, соответствующему выражению.
- Общепринятой практикой является использование подстановочного знака звездочки
*
в качестве окончательного шаблона для определения регистра по умолчанию. Эта модель всегда будет актуальна. - Если совпадений не найдено, статус возврата равен нулю. В противном случае статус возврата является статусом выхода выполненных команд.
Пример дела
Вот пример использования оператора Case в скрипте Bash, который будет печатать на официальном языке данной страны:
#!/bin/bash
echo -n "Enter the name of a country: "
read COUNTRY
echo -n "The official language of $COUNTRY is "
case $COUNTRY in
Lithuania)
echo -n "Lithuanian"
;;
Romania | Moldova)
echo -n "Romanian"
;;
Italy | "San Marino" | Switzerland | "Vatican City")
echo -n "Italian"
;;
*)
echo -n "unknown"
;;
esac
Сохраните пользовательский скрипт в виде файла и запустите его из командной строки.
bash languages.sh
Скрипт попросит вас ввести страну. Например, если вы наберете «Литва», он будет соответствовать первому шаблону, и echo
будет запущено в этом предложении.
Скрипт напечатает следующий вывод:
Enter the name of a country: Lithuania
The official language of Lithuania is Lithuanian
Если вы вводите страну, которая не соответствует какой-либо другой причине, кроме подстановочного знака звездочки по умолчанию, мы предполагаем, что в Аргентине сценарий выполнит команду echo внутри предложения по умолчанию.
Enter the name of a country: Argentina
The official language of Argentina is unknown
Вывод
К настоящему времени вы должны хорошо понимать, как писать операторы case в bash. Они часто используются для передачи параметров сценарию оболочки из командной строки. Например, сценарии инициализации используют операторы Case для запуска, остановки или перезапуска служб.