В программировании на bash оператор case помогает упростить сложные условные выражения, когда есть несколько разных вариантов. Вместо использования вложенных операторов if мы можем использовать оператор case, чтобы сделать код bash более читабельным и поддерживаемым.
Оператор case в bash имеет сходство с оператором switch в JavaScript и C. Однако основное отличие состоит в том, что после совпадения с шаблоном поиск дополнительных совпадений с шаблоном не выполняется.
В этой статье будут рассмотрены основы оператора case в bash с различными примерами.
Основная структура оператора case следующая:
case <выражение> in <pattern_1>) заявления ;; <pattern_2>) заявления ;; *) заявления ;; esac
Вот краткое описание структуры:
Понимание оператора if-else в bash полезно для понимания и усвоения оператора case в bash.
Теперь, когда мы знаем основы, пора проверить это в действии. Взгляните на следующий сценарий.
#!/bin/bash echo -n "Введите значение: " read VALUE case $VALUE in 1) echo "one" ;; 2) echo "two" ;; 3) echo "три" ;; 4 | 5) echo "больше трех" ;; *) echo "неизвестное значение" ;; esac
Сохраните сценарий. Отметьте его как исполняемый.
$ chmod +x sample.sh
Теперь запустим сценарий.
$ ./sample.sh
Скрипт попросит ввести значение. Если значение соответствует любому из шаблонов, будет выполнено предложение сопоставления. Если совпадения не найдено, то оно будет соответствовать предложению по умолчанию.
В следующем примере мы будем использовать строки для сопоставления значений.
#!/bin/bash echo -n "Введите имя планеты: " read PLANET case $PLANET in Mercury | Venus | Earth | Mars | Jupiter | Saturn | Uranus | Neptune) echo "$PLANET это планета из солнечной системы" ;; Pluto) echo "$PLANET является карликовой планетой" ;; "Planet Nine") echo "$PLANET еще не обнаружено" ;; *) echo "Не из солнечной системы" ;; esac
Скрипт будет работать так же, как и в первом примере. Он запросит имя планеты, проверит, соответствует ли ввод какому-либо предложению, и выполнит предложение соответствия.
Если вы внимательно посмотрите, то заметите, что «Planet Nine» – единственное значение, заключенное в кавычки. Потому что в нем есть место. Используя кавычки, мы говорим оболочке рассматривать это как часть единого шаблона.
Обратите внимание, что в последнем примере ввод чувствителен к регистру. Это поведение bash по умолчанию. Однако мы можем указать оболочке запустить скрипт в режиме без учета регистра.
Для этого добавьте следующую строку в начало скрипта.
$ shopt -s nocasematch
Скрипт должен выглядеть так.
Теперь проверьте сценарий. Введите значение в другом регистре.
$ ./sample.sh
Эта статья охватывает основы операторов case в bash. Он также демонстрирует, как реализовать их в сценариях bash. Вам должно быть удобно использовать оператор case. Операторы case в Bash часто используются для передачи параметров сценариям оболочки из командной строки. Например, сценарии инициализации используют операторы case для запуска, остановки и перезапуска служб.