# Linux- Множественный выбор в Bash. Оператор Case для сравнений

Он очень гибок в использовании и дает возможность производить сложные сравнения входящих параметров.

2018.09.10        


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

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

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

2.jpeg

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

  1. Конструкция начинается с ключевого слова for, за которым следует блок инициализации цикла.
  2. Блок инициализации открывается определением переменной, в которую будут записываться значения текущих элементов на каждом этапе выполнения.
  3. После определения переменной размещается ключевое слово in. Оно является своего рода разделителем переменной и списка элементов.
  4. За ключевым словом in происходит определение списка, предназначенного для перебора в цикле. Списком может быть: массив, простой ряд чисел или строк, механизмы подстановки, формирующие последовательности и т.д.
  5. Блок команд, который будет выполняться для каждого элемента, задается между ключевыми словами do и done. Где do — начало, а done — конец.
  6. Если ключевое слово do располагается на одной строке с определением списка, перед ним должна находиться точка с запятой.

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

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

3.jpeg