Рубрики
bash

bash case

Case-условные переходы:

Конструкции case вводятся ключевым словом case, за которым следует параметр, предназначенный для анализа (обычно это переменная). 
После ключевого слова in можно указать несколько возможных шаблонов строки, с которыми будет сравниваться параметр. 
При этом могут использоваться те же джокерные символы, что и при работе с именами файлов. Шаблон завершается круглой скобкой, то есть, например, --*). 
Это делается для распознавания таких последовательностей, которые начинаются с двух знаков «минус». Несколько шаблонов можно отделять друг от друга символом |. 
В таком случае проверяются оба шаблона. Например, *. с | *. h) служит для распознавания файлов *. с и *. h в одном и том же ветвлении программы.

Команды, идущие вслед за скобками, должны завершаться двумя точками с запятой. 
Если потребуется переход else, то в качестве последнего шаблона необходимо указать * — такому шаблону будут соответствовать все последовательности символов. 

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

В следующем примере casetst показано применение case для классификации переданных параметров на имена файлов. 
Цикл для переменной i выполняется со всеми параметрами, переданными файлу оболочки. 
В этом цикле каждый отдельный параметр анализируется с помощью case. 
Если параметр начинается с дефиса (-), то он находится в конце переменной opt, в противном случае — в конце dat.

Тестовый запуск файла оболочки на практике показывает, как работает этот простой оператор выбора. 
Параметры, переданные по порядку без сортировки, подразделяются на имена файлов и параметры:
user$ casetst -x -у datl dat2 -z dat3
Options:   -x -у -z 
Files: datl dat2 dat3

По тому же принципу условные переходы case могут использоваться для классификации определенных расширений файлов (путем указания поискового шаблона *.abc). 
Если вы хотите плотнее заняться case-анализом, посмотрите файл оболочки /usr/bin/gnroff. 
В нем дается синтаксис параметров, передаваемых nroff, в виде, понятном родственной команде groff.

Пример скрипта casetst:

#! /bin/sh
# Пример casetst
 opt=     # Удаление opt и dat
 dat=

for i do   # Цикл для всех переданных параметров 
 case "$i" in
 -* ) opt="$opt $i";;
 * ) dat="$dat $i";; 
 esac
done     # Конец цикла 
 echo "Options: $opt" 
 echo "Files: $dat"