Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы OC UNIX_часть3.doc
Скачиваний:
21
Добавлен:
18.04.2015
Размер:
543.23 Кб
Скачать

5.4. Выполнение shell–программ

Любая, хранимая в файле команда или последовательность команд системы UNIX, называется shell–программой или командным файлом. Обычно термин «командный файл» относят к простой последовательности команд, а «shell–программа» – к их более сложно организованным наборам, в которых часто используются условные командыshellи другие дополнительные средства.

Существует три способа инициации shellдля выполнения командных файлов.

  1. Первый из них основан на том, что путем переадресации можно обеспечить ввод команд из файла:

$ sh<dw

Результат достаточно ясен: shбудет читать команды из файлаdw, игнорируя двоеточие и пропуская комментарии (аналогично тому, как если бы вы набралиdata;who).

  1. Даже без переназначения shвоспринимаетdwв качестве аргумента, выделяя из него две команды и выполняя их с идентичными результатами. Программаsh(как и многие другие программы Unix) может воспринимать свои входные данные из файла, заданного в качестве аргумента, независимо от того, используете вы переназначение или нет:

$ sh dw

Хотя эти два примера дают один и тот же результат, с технической точки зрения они различны. В примере sh dwкомандный процессор сохраняет в качестве стандартного ввода вашу клавиатуру, а в случаеsh<dwстандартный ввод переназначается на файлdw.

Описав два способа использования dwнеобходимо уточнить, чтоdw– это еще не настоящий сценарий командного процессора. По определению сценарий командного процессора – это выполняемый текстовый файл, который может работать как обычная команда.

  1. Третий метод состоит в том, что для выполнения shell–программы требуется лишь указать ее имя, так как работа с ней ничем не отличается от работы с другими программами, достаточно при этом установить разрешение на выполнение файла, выполнив команду изменения его кода защиты:

$ chmod a+x dw

(Так как азадается по умолчанию, будет работать и просто+х)

При таком вызове исходный командный процессор распознает, что dw– это сценарий командного процессора (поскольку это выполняемый текстовый файл, а не выполняемый двоичный), и немедленно порождает командный процессор для чтения и выполнения командdw. Подпроцессор выполняет необходимые действия, родительский командный процессор ждет, пока подпроцессор закончит свою работу. Сигнал конца файла, генерируемый, когдаdwвсе сделает, уничтожает процесс командного процессора (точно так же, как если бы вы нажалиCtrl–D). Родительский командный процессор активизируется вновь, и выводит приглашение.

Для вызова dwможно применить команду точки.

$ .dw

Исходный командный процессор сам считывает и выполняет найденные в файле dwкоманды (командный подпроцессор не вызывается). Выводимые на экран результаты будут совпадать с командамиsh<dw,sh dwиdw. Когда командный подпроцессор выполняет команду, все изменения (присваивания переменных, изменения в каталоге и т.д.), вносимые данной командой в операционную среду, влияют только на этот подпроцессор, При возврате в родительский командный процессор восстанавливается исходная среда. Все внесенные командой изменения сохраняются на выходе, так как команда с точкой выполняет свой аргумент–команду в текущем командном процессоре.

Ко всем сценариям применимы следующие общие правила:

  1. Предполагается, что вы работаете в своих собственных каталогах.

  2. Ваш маршрут PATHвключает в себя текущий каталог.

  3. У вас есть необходимые полномочия чтения/записи.

Перед началом непосредственной интерпретации и выполнением команд, содержащихся в командных файлах, shellвыполняет различные виды подстановок.

  1. Подстановка результатов. Выполняются все команды, заключенные в обратные кавычки, и на их место подставляется результат.

  2. Подстановка значений параметров и переменных. Т.е. слова, начинающиеся на "$", заменяются соответствующими значениями переменных и параметров.

  3. Интерпретация пробелов. Заэкранированные пробелы игнорируются.

  4. Генерация имен файлов. Проверяются слова на наличие в них спецсимволов ("*","?","[]") и выполняются соответствующие генерации.