Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 1-8 / ОС_07.doc
Скачиваний:
93
Добавлен:
04.04.2013
Размер:
114.69 Кб
Скачать

4.7. Построим простейшую Shell-процедуру (командный файл)

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

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

%cd /bin

%ls –l | more

%cd

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

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

%sh batch1

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

%chmod +x batch1

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

%batch1

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

%batch 1 /bin

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.9. Простые условные операторы

4.9.1. And-if (&&) – Условное и

Формат этой конструкции следующий:

command1 && command2

Эта конструкция состоит из двух частей. Если первая команда выполнена успешно (код возврата “Истина”), только в этом случае выполняется вторая команда.

Пример:

%test -f .profile && cp .profile backup

1) первая команда (test -f .profile) проверяет, существует ли обычный файл .profile и, если такой файл существует, то выполняется вторая часть конструкции;

2) cp .profile backup – создаёт резервную версию файла backup.

Таким образом, вторая команда (команда копирования) выполняется в том случае, если команда test возвращает код «Истина», то есть основной файл (.profile) существует.

4.9.2. Or-if (||) – Условное или

Формат этой конструкции следующий:

command1 || command2

Вызывается команда command1 и проверяется её код возврата. Если command1 НЕ выполнилась (код её возврата будет не нулевым), то интерпретатор вызовет команду command2.

Пример:

%mkdir sample

Создается каталог sample.

%rmdir sample > /dev/null || echo failure

Каталог sample удаляется. Возможные сообщения команды rmdir перенаправляются на нуль-устройство. Вторая команда (echo failure) не выполняется.

%rmdir sample > /dev/null || echo failure

failure

Каталога sample уже нет. При выполнении команды rmdir получен код возврата False (Ложь). Поэтому выполняется команда echo, которая и выводит слово "failure" (ошибка).

Соседние файлы в папке Лекции 1-8