
Оператор case в bash обычно используется для упрощения сложных условных выражений, когда есть несколько вариантов выбора. Использование оператора case вместо вложенных операторов if сделает ваши bash-скрипты более читабельными и простыми в поддержке.
Оператор case в Bash имеет концепцию, схожую с оператором switch в Javascript или C. Главное отличие заключается в том, что, в отличие от оператора switch в C, оператор case в Bash не продолжает поиск соответствия шаблону после того, как он найден и выполнены операторы, связанные с этим шаблоном.
В этом руководстве будут рассмотрены основы оператора case в Bash и показано, как использовать его в скриптах оболочки.
Синтаксис оператора case
Синтаксис оператора case в Bash состоит из ключевого слова « case », за которым следует значение для сопоставления, ключевого слова « in » и одного или нескольких шаблонов с соответствующими блоками кода, заключенными в операторы « ;; »:
case EXPRESSION in PATTERN_1 ) STATEMENTS ;; PATTERN_2 ) STATEMENTS ;; PATTERN_N ) STATEMENTS ;; * ) STATEMENTS ;; esac
- Каждый оператор
caseначинается с ключевого словаcase, за которым следует выражение case и ключевое словоin. Оператор заканчивается ключевым словомesac. - Можно использовать несколько шаблонов, разделённых оператором
|. Оператор)завершает список шаблонов. - Шаблон может содержать специальные символы .
- Шаблон и связанные с ним команды называются предложением.
- Каждое предложение должно заканчиваться знаком
;;. - Выполняются команды, соответствующие первому шаблону, который соответствует выражению.
- Обычно в качестве окончательного шаблона для определения регистра по умолчанию используется подстановочный символ звёздочки (
*). Этот шаблон всегда будет совпадать. - Если шаблон не найден, возвращается нулевой статус. В противном случае возвращается статус завершения выполненных команд.
Пример заявления
Ниже приведен пример использования оператора case в скрипте bash, который выводит официальный язык заданной страны:
языки.sh
#!/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. Они часто используются для передачи параметров скрипту оболочки из командной строки. Например, в скриптах init операторы case используются для запуска, остановки и перезапуска служб.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства