"Рас Сэйдж. Приемы профессиональной работы в UNIX" - читать интересную книгу автора

одном и том же каталоге, например /usr/*).

ПОЯСНЕНИЯ

Первая строка содержит только знак двоеточия (:) - "нулевую ко-
манду". Это связано с тем, что все командные файлы, описываемые в этой
книге, сделаны так, чтобы их можно было запускать в среде интерпрета-
тора Bourne shell. Наш комментарий в строке 2, идентифицирующий
версию, начинается со знака решетки (#). Си-shell ищет этот знак как
первый знак командного файла. Если он найден, то предпринимается по-
пытка выполнить данный командный файл. В противном случае Си-shell пе-
редает командный файл интерпретатору Bourne shell. Вот почему мы не
хотим начинать первую строку со знака #. Мы, конечно, могли бы оста-
вить первую строку чистой, но чистая строка невидима и может быть слу-
чайно удалена. Соответственно мы будем использовать чистые строки в
других случаях, чтобы выделить важные участки программы.
Строка 2 идентифицирует версию. Символьная строка @(#) есть спе-
циальная последовательность в строке комментария, которая распознается
как строка "what" ("что"). Команда what в системе UNIX читает файл и
печатает сообщение, которое следует за строкой "what". Чтобы идентифи-
цировать версию данного командного файла, наберите

# what tree

и будет напечатано следующее сообщение:

tree:
tree v1.0 Visual display of a file tree Author: Russ Sage

Строки 4-7 проверяют, не слишком ли много аргументов было переда-
но командной строке. Это осуществляется путем исследования переменной
$#, которая представляет собой счетчик числа позиционных параметров
командной строки. Если насчитывается более одного параметра, печата-
ется соответствующее сообщение об ошибке в стандартный файл ошибок
(stderr) и программа останавливается с плохим значением статуса.
Отметим, что команда echo обычно печатает в стандартный выход
(stdout). Мы можем перенаправить stdout в другой файловый дескриптор,
указав его. В данном случае мы собираемся печатать в stderr. Синтаксис
переводится так: "вывести эту строку и перенаправить ее в файловый
дескриптор (&) стандартного файла ошибок (2)". Печать сообщений об
ошибках в stderr обеспечивает согласованное поведение командного файла
независимо от среды, в которой он запущен.
Отметим также, что коды статуса выхода в интерпретаторе shell
противоположны тем, которые используются при программировании на языке
Си. В Си истинное значение есть 1, ложное отлично от 1. При программи-
ровании на языке shell успешным статусом выхода (истиной) является 0,
а плохим статусом (ложью) ненулевое значение.
Вы, возможно, удивитесь, почему мы так беспокоимся о том, чтобы
вернуть ложный статус выхода, если командный файл собирается просто
напечатать сообщение об ошибке и прекратить работу. Дело в том, что