Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 3-4 (Методы) / ОС_лаб_4.doc
Скачиваний:
36
Добавлен:
04.04.2013
Размер:
102.4 Кб
Скачать

5. Простейшая командная процедура (командный файл)

Пусть требуется перейти из домашнего каталога в каталог /bin, распечатать его содержимое и вернуться назад.

Последовательность команд, которая решает эту задачу, выглядит следующим образом:

%cd /bin

%ls –l | more

%cd

Запишем эту последовательность команд в файл с именем batch1.

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

%shbatch1

Unixпозволяет сделать из текстового файлаbatch1 настоящую программу (команду). Для этого необходимо для файлаbatch1 установить в правах доступа разрешение на выполнение:

%chmod+xbatch1

Теперь этот командный файл можно вызывать на выполнение так же, как и другие команды – по имени:

%batch1

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

%batch1 /bin

где аргумент /binзадает имя каталога.

Заменим имя каталога /binв первой строке командного файлаbatch1 на позиционную переменную$1:

Позиционная переменная $1 является формальным параметром и интерпретатор командного языка заменит его на фактический параметр – имя каталога, заданное в качестве аргумента при вызове командной процедуры batch1.

В общем случае алгоритм обработки интерпретатором команд строк командной процедуры следующий:

  • интерпретатор читает очередную строку;

  • выявляет метасимволы и переменные;

  • производит необходимые замены и подстановки;

  • после этого интерпретатор вызывает исполняемый файл, имя которого совпадает с именем команды, и передает ему строку параметров.

6. Специальные параметры интерпретатора команд

Интерпретатор присваивает (автоматически) значения некоторым параметрам, обозначаемым одним из следующих символов:

# - количество позиционных параметров;

* - значения позиционных параметров в виде строки "$1 $2 $3 …";

@ - значения позиционных параметров;

$ - идентификатор текущего процесса (Shell-процесса);

? - десятичное значение, возвращаемое последней выполненной командой;

- - флаги, указанные при запуске Shell

! - идентификатор последнего запущенного процесса.

7. Команда test

Встроенная команда testинтерпретатора командshиспользуется в следующих случаях:

  • для сравнения строк и чисел;

  • для проверки состояния файла;

  • в операторе if.

Формат команды:

test<выражение>

Команда testвычисляет <выражение> и, если значение выражения - ИСТИНА, то возвращает код завершения 0 (True); иначе – ненулевое значение (false).

7.1. Cравнение строк

Формат команды testдля сравнения строк:

testстрока1=строка2 # проверка на равенство

testстрока1!=строка2# проверка на неравенство

Пример_1: проверка на пустой аргумент команды

%test"$1"=""

7.2. Cравнение чисел

Формат команды testдля сравнения чисел:

testчисло1<оператор>число2

Операторы указываются в соответствии со следующей таблицей:

Наименование оператора

Математический вид оператора

Оператор в команде test

равно

-eq

не равно

-ne

меньше

<

-lt

меньше или равно

-le

больше

>

-gt

больше или равно

-ge

Пример_1: проверка кода возврата последней выполненной команды

на 0.

test"$?" -eq0

Пример_2: проверка текущей даты на 20 число

test "`date +%d`" -eq 20

Здесь date+%d– команда получения текущей даты, в которой форматная строка (+%d) ограничивает вывод команды только числом.

Соседние файлы в папке Лаба 3-4 (Методы)