Управляющая конструкция case (раскладывать) предназначена для организации ветвления по нескольким направлениям в зависимости от значений аргументов, т.е. можно эту конструкцию использовать для реализации простейших меню. Общий вид команды следующий:
case переменная in
образец) список–команд ;;
образец) список–команд ;;
...
Esac
Здесь case, in и esac – служебные слова. Каждая альтернатива заканчивается литерами ;;. Оболочка пытается сопоставить переменную с каждым из образцов в порядке их записи. Если найден подходящий образец, выполняется соответствующий список–команд, после чего выполнение конструкции case завершается. На месте списка команд могут быть вызовы более сложных расчетов.
Непривычно выглядят в конце строк выбора два символа точки с запятой – ";;", но написать здесь один раз точку с запятой ";" было бы ошибкой. Для каждой альтернативы может быть выполнено несколько команд. Если эти команды будут записаны в одну строку, то символ ";" будет использоваться как разделитель команд.
Обычно последняя строка выбора имеет шаблон "*", что в структуре "case" означает "любое значение". Эта строка выбирается, если не произошло совпадение значения переменной (в следующем примере – $y) ни с одним из ранее записанных шаблонов, ограниченных скобкой ")". Значения просматриваются в порядке записи.
Например, Введите имя файла, а затем (через пробел) наберите цифру, соответствующую требуемой обработке:
1 – отсортировать содержимое указанного файла;
2 – выдать на экран содержимое файла;
3 – определить число строк в файле.
read x y # x – имя файла, y – что сделатьcase $y in 1) sort < $x ;; 2) cat < $x ;; 3) wc –l < $x ;; *) echo "Нет такой команды!" ;;esac