Множественный выбор в Bash. Как использовать оператор Case для сравнений?

множественный выбор в bash. как использовать оператор case для сравнений?

Применение оператора Case

В одном из прошлых уроков мы рассмотрели использование условного оператора If для ветвления программной логики сценариев. Он очень гибок в использовании и дает возможность производить сложные сравнения входящих параметров. Однако при большом количестве альтернативных вариантов сравнений, расположенных в небольшой части Bash-скрипта, более удобным решением может стать оператор множественного выбора case.

Принцип его работы довольно прост. Оператору case можно передать всего один параметр, который поочередно сравнивается с подготовленными шаблонами. Если сравнение истинно, выполняется блок кода, лежащий под шаблоном. Выполнение оператора case завершится при отработке блока кода, либо прохождении всех шаблонов до конца и отсутствии совпадений.

Bash определяет несколько синтаксических правил оформления по отношению к case. Взгляните на пример, приведенный ниже. Сразу за ним даются пояснения по оформлению кода.

#!/bin/bash

#считываение ввода пользователя
echo -n 'Ваша любимая компьютерная игра: '
read game


#осуществляем сравнения с шаблонами
case $game in
    warcraft|wow)
        echo "Жизнь за Нер'зула!!!";;

    diablo)
        echo 'Мы покроем себя славой';;

    sims)
        echo 'Своеобразный выбор';;
esac

Правила оформления оператора case:

  1. Конструкция множественного выбора начинается с ключевого слова case.
  2. Сразу за ключевым словом case, внутри кавычек, следует определение входящего параметра. Чаще всего это значение переменной.
  3. Начало определения блока сравнений открывается ключевым словом in, расположенным за входящим параметром.
  4. Каждое сравнение задается шаблоном. Он может быть строкой или числом, а также содержать механизмы подстановки. Шаблон в обязательном порядке закрывается правой круглой скобкой.
  5. Сразу за правой круглой скобкой шаблона или на следующих строках после него располагаются команды, требующие выполнения при совпадении входящего параметра. Последняя команда внутри такого блока должна завершаться двумя точками с запятой «;;».
  6. Если вам требуется назначить несколько шаблонов для одного и того же блока команд используйте символ «|» для их разделения. Например, «*.txt | *.bat )».
  7. Блок сравнений должен завершаться ключевым словом esac.

Указание шаблона по умолчанию

Аналогично условному оператору If Bash позволяет задать программный код, который будет выполнен, если ни один шаблон не совпадет со входящим параметром. Для этого после всех шаблонов, расположенных внутри тела оператора case, нужно создать отдельный шаблон «* )». Он соответствует любому значению.

#!/bin/bash

#считываение ввода пользователя
echo -n 'Введите имя файла: '
read file_name


#осуществляем сравнения с шаблонами
case $file_name in
    *.cpp)
        echo 'Программа на языке С++';;

    *.js)
        echo 'Исходный код JavaScript';;

    *.css)
        echo 'Каскадная таблица стилей';;

    *)
        echo 'Тип файла не распознан';;
esac

Последние публикации