UNIX — универсальная среда программирования, стр. 59
1) m=$l; set `date`; y=$6 ;; #1 arg: use this year*) m=$1; y=$2 ;; #2 args: month and yearesaccase $m injan*|Jan*) m=1 ;;feb*|Feb*) m=2 ;;mar*|Mar*) m=3 ;;apr*|Apr*) m=4 ;;may*|May*) m=5 ;;jun*|Jun*) m=6 ;;jul*|Jul*) m=7 ;;aug*|Aug*) m=8 ;;sep*|Sep*) m=9 ;;oct*|Oct*) m=10 ;;nov*|Nov*) m=11 ;;dec*|Dec*) m=12 ;;[1-9]|10|11|12) ;; # numeric month*) y=$m; m="" ;; # plain yearesac/usr/bin/cal $m $y # run the real one$В первом операторе case проверяется число аргументов
$#mycalПервый оператор
caseset `date`Хотя это сразу и не очевидно, легко установить действие команды, запустив ее:
$ dateSat Oct 1 06:05:18 EDT 1983$ set `date`$ echo $1Sat$ echo $406:05:20$Итак, мы имеем дело с встроенной командой интерпретатора, возможности которой многообразны. При отсутствии аргументов она выдает, как указывалось в гл. 3, значения переменных окружения. В случае обычных аргументов переопределяются значения
$1$2set `date`$1$2caseКоманда
set-v-хshellТеперь осталось только перевести значение месяца, если оно представлено в строковом виде, в число. Это делается с помощью второго оператора
case|caseegrepмалый|большой[jJ]an*date* | Задает любую строку, включая пустую |
? | Задает любой одиночный символ |
[ccc] | Задает любой из символов в ccc [a-d0-3][abcd0123] |
"..." | Задает в точности ...'...' |
\c | Задает с |
a|b | Только для выражений выбора; задает аb |
/ | Для имен файлов; соответствует только символу / |
. | Если это первый символ в имени файла, то сопоставляется только с явно заданной точкой в выражении |
Таблица 5.2: Правила сопоставления шаблонов в интерпретаторе
Два последних варианта второго оператора
casecaseНаконец, в последней строке вызывается
/usr/bin/calcalcal$ dateSat Oct 1 06:09:55 EDT 1983$ calOctober 1983