Читаем UNIX — универсальная среда программирования полностью

В первом операторе case проверяется число аргументов $# и выбирается подходящее действие. Последний шаблон в этом операторе задает вариант, выбираемый по умолчанию; если число аргументов не 0 и не 1, будет выполнен последний вариант. (Поскольку шаблоны просматриваются по порядку, вариант по умолчанию должен быть последним.) При наличии двух аргументов m и y принимают значение месяца и года, и наша команда cal должна выполняться как исходная команда.

Первый оператор case включает пару нетривиальных строк, содержащих

set `date`

Хотя это сразу и не очевидно, легко установить действие команды, запустив ее:

$ date

Sat Oct 1 06:05:18 EDT 1983

$ set `date`

$ echo $1

Sat

$ echo $4

06:05:20

$

Итак, мы имеем дело с встроенной командой интерпретатора, возможности которой многообразны. При отсутствии аргументов она выдает, как указывалось в гл. 3, значения переменных окружения. В случае обычных аргументов переопределяются значения $1, $2 и т.д. Поэтому set `date` присваивает $1 — день недели, $2 — название месяца и т.д. Таким образом, при отсутствии аргументов в первом case месяц и год устанавливаются из текущей даты. Если был задан один аргумент, он используется в качестве месяца, а год берется из текущей даты.

Команда set имеет также несколько флагов, из которых наиболее часто используются флаги -v и — для отключения эха команд при обработке их интерпретатором. Такое отключение может оказаться необходимым в процессе отладки сложных программ на языке shell.

Теперь осталось только перевести значение месяца, если оно представлено в строковом виде, в число. Это делается с помощью второго оператора case, который практически очевиден. Единственный нюанс состоит в том, что символ | в шаблонах оператора case, как и в команде egrep, означает альтернативу: малый|большой соответствует варианту "малый" или "большой". Конечно, эти варианты можно было бы задать с помощью [jJ]an* и т.д. Программа допускает задание месяца строчными буквами, поскольку большинство команд работает с входным потоком, где данные записаны строчными буквами (иногда первая буква — прописная), поскольку так выглядит вывод команды date. Правила сопоставления шаблонов приведены в табл. 5.2.

*Задает любую строку, включая пустую
?Задает любой одиночный символ
[ccc]Задает любой из символов в ccc [a-d0-3] эквивалентно [abcd0123]
"..."Задает в точности ...; кавычки защищают от специальных символов. Аналогично действует '...'
\cЗадает с буквально
a|bТолько для выражений выбора; задает а или b
/Для имен файлов; соответствует только символу / в выражении; для выражений выбора сопоставляется, как любой другой символ
.Если это первый символ в имени файла, то сопоставляется только с явно заданной точкой в выражении

Таблица 5.2: Правила сопоставления шаблонов в интерпретаторе

Два последних варианта второго оператора case относятся к случаю, когда единственный аргумент может быть годом; напомним, что в первом операторе case предполагалось, что аргументом является месяц. Если это число, которым может быть задан месяц, то ничего не происходит (иначе предполагается, что задан год).

Наконец, в последней строке вызывается /usr/bin/cal (настоящая команда cal) с преобразованными аргументами. Наша версия команды cal работает так, как этого мог бы ожидать начинающий:

$ date

Sat Oct 1 06:09:55 EDT 1983

$ cal

October 1983

  S  М Tu  W Th  F  S

                    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 26 27 28 29

 30 31

$ cal dec

December 1983

  S  M Tu  W Th  F  S

              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 26 27 28 29 30 31

$

При обращении к cal 1984 будет напечатан календарь на весь 1984 год. Наша обобщенная команда cal выполняет то же задание, что и исходная, но более простым и легко запоминающимся способом. Поэтому мы предпочитаем называть ее cal, а не calendar (что уже является командой), или как-нибудь еще с менее простой мнемоникой, например ncal. При использовании одного и того же имени пользователю не придется вырабатывать новые рефлексы для печати календаря.

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Секреты приложений Google
Секреты приложений Google

Даже продвинутые пользователи Интернета не подозревают о тех огромных возможностях, которые предоставляют сервисы Google. Автор рассказывает о таких «секретах» сервисов, которые просто немедленно хочется использовать! Создавать сайты и презентации, бродить по улочкам Парижа, изучать звездное небо – все это доступно каждому, кто сидит у экрана монитора и имеет доступ в Интернет. Книга научит вас работать с веб-приложениями и тысячекратно увеличить свои возможности с помощью новейших технологий. Она написана легким, доступным языком и не требует от читателя наличия каких-либо специальных знаний. Книга содержит множество примеров, иллюстраций и будет полезна всем, кто не стоит на месте и стремится сделать свою жизнь более насыщенной и интересной.

Денис Балуев , Денис Игоревич Балуев

Программирование, программы, базы данных / Интернет / Программное обеспечение / Книги по IT
Wi-Fi: Все, что Вы хотели знать, но боялись спросить
Wi-Fi: Все, что Вы хотели знать, но боялись спросить

Жизнь современного человека — это движение. Мобильность для нас становится одним из самых важных моментов для работы, для общения, для жизни. Многие из нас сейчас уже не представляют жизнь без сотовых телефонов, которые из средства роскоши превратились в предмет, без которого жизнь современного человека стала просто немыслима. Многие уже оценили все преимущества Bluetooth, GPRS. Эти устройства превратили наши телефоны из средств связи в незаменимых помощников в работе. К сожалению, один из самых главных недостатков этих беспроводных технологий — малый радиус действия и низкая скорость передачи данных, что сейчас становится очень важным фактором для всех нас. Поэтому к нам на помощь приходит активно развивающийся во всем мире и в России стандарт Wi-Fi. Особенно радует, что в крупных городах России, особенно в Москве и Санкт-Петербурге, начинается массовое внедрение беспроводных сетей Wi-Fi в публичных местах (так называемых Hot Spot) — отелях, аэропортах, ресторанах, торговых центрах и кафе.Что же такое Wi-Fi? Очередной мыльный пузырь IT-индустрии, который изо всех сил надувают производители и поставщики телекоммуникационного оборудования или новая технология, призванная в очередной раз изменить наш привычный мир, как это случилось когда-то с появлением Интернет и сотовой связи?

А К Щербаков , А. К. Щербаков

Компьютерное 'железо' (аппаратное обеспечение), цифровая обработка сигналов / Интернет / Компьютерное «железо» / Книги по IT