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

5.1. Пример простейшего сценария

Если система UNIX поддерживает специальную запись (#!), то в начале файла сценария должна находиться следующая строка:

#!/bin/sh

С помощью этой комбинации символов можно сообщить системе UNIX, какой интерпретатор должен выполнять данный сценарий.

Например,

#!/bin/bash

Эта последовательность указывает на программу, которую следует использовать для обработки сценария – командную оболочку bash.

Если система UNIX не может правильно обработать последовательность символов (#!), то первую строку сценария оставляют пустой или указывают пустой оператор (:).

Например,

:

# @(#)dw – вывести дату и пользователей – stas 11/04/12

#

date

who

  1. Первое одиночное двоеточие не является обязательным. Это просто общепринятое соглашение, показывающее, что следующий текст является сценарием командного процессора Bourne. Двоеточие интерпретируется командным процессоромBourneкакNOP(пустая операция) и, таким образом, игнорируется.

Пустой оператор имеет формат – " :". Этот оператор ничего не делает, только возвращает значение кода завершения "0".

Командный процессор Сииспользует первый найденный в сценарии символ. Начальный символ#(символ комментария), сообщает процессоруСи, что следующий текст является сценарием командного процессораСи. Любой другой начальный символ, отличный от#указывает командному процессоруСи, что нужно выполнить ваш сценарий как сценарий командного процессораBourne.

  1. Следующие две строки представляют собой необязательный комментарий, на что указывает начальный символ #. Командный процессорBourneигнорирует любое начинающееся с символа#слово и все последующие символы вплоть до символа новой строки. Комментарии можно использовать для аннотирования своих сценариев (указания автора, даты, номера версии и т.д.).

Строка @(#)– это полезный прием, используемый командойwhatдля выделения заголовка и назначения сценария. Командаwhatсканирует задаваемый в качестве аргумента файл и выводит на экран информацию из любого раздела комментария, содержащего последовательность символов@(#):

$ what dw

dw:

dw – вывести дату и пользователей – stas 11/04/12

$

По этой причине набор символов @(#)часто называютстрокой индикации. Командаwhatбудет выводить все помеченные таким образом строки.

  1. Третья строка с одиночным символом # просто улучшает читаемость сценария. С равным успехом здесь могла бы восприниматься и пустая строка.

5.2. Основные этапы разработки сценария

Очень важно при разработке сценария любой сложности придерживаться следующих правил:

  • спланируйте последовательность команд и проверьте их вводом с клавиатуры;

  • выберите для сценария подходящее имя, не конфликтующее с другими именами;

  • создайте файл сценария с помощью редактора, с которым вы знакомы;

  • начните файл с двоеточия и добавьте описательные комментарии;

  • сделайте файл выполняемым с помощью команды chmod.

5.3. Отладка командных процедур

В оболочке предусмотрены два механизма, облегчающие отладку командных процедур. Первый из них приводится в действие в результате выполнения в самой процедуре команды set –v имя_процедурыи вызывает распечатку строк процедуры по мере их считывания. Это облегчает поиск синтаксических ошибок. Отключается это средство командойset +v.

Команда set –xвключит трассировку выполнения. Команды будут печататься по мере их выполнения после подстановки в них значений переменных.

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

Все флаги можно отменить командой set –.

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

$–

Имеется еще одно средство, позволяющее отладку: размещение в процедуре команды echoдля выдачи промежуточных трассировочных сообщений.

set [–ekntuvx]– Эти флаги могут задаваться также при вызове оболочки. Текущие установки флагов можно найти в переменной$–. Если не задано ни одного параметра, то будут распечатаны значения всех переменных. Значения опций будут следующие.

–e

В неинтерактивном режиме работы прекратить выполнение командного файла при неудачном завершении любой команды

–k

Поместить в среду вызываемой команды все ключевые параметры, заданные в списке параметров вызова, а не только те, которые предшествуют имени команды

–n

Считывать команды, но не выполнять их

–t

Прекратить работу после чтения и выполнения одной команды

–u

Считать ошибкой подстановку не установленных переменных

–v

Печатать строки командного файла по мере их считывания

–x

Печать команды и их параметры по мере их выполнения

Отмена опции –хи–v