Case-условные переходы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Конструкции 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#! /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" |
1 |