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

3.5. Конвейеры и списки

В терминологии UNIX следует различать группы простых команд, конвейеры и списки. Мы уже знаем, что представляют собой простые команды. Кроме них, в ОС UNIX существуют еще два фундаментальных понятия – конвейеры и списки. Их необходимо уяснить для того, чтобы лучше разобраться в управляющих структурах.

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

Любая из перечисленных ниже строк представляет собой конвейер:

$ ls –l /bin /usr/bin

$ who | wc –l

$ a | b | c | d

$ ps

Конвейеры в данном случае разделяются символами новой строки.

В системе UNIX последовательность конвейеров называют списком, так что эти четыре строки образуют список и выступают в качестве элементов–конвейеров. Следующий список эквивалентен первому:

$ ls –l /bin /usr/bin;who|wc –l;a|b|c|d;ps

Список считается основной структурой в UNIX. Он может быть простым, как простая команда и настолько сложным, насколько вам удастся его таким сделать. Значение кода завершения, возвращаемое списком, равно соответствующему значению для последнего конвейера в нем. Важно осознавать различие между командой, конвейером и списком:

1) По простой команде выполняется одна программа.

2) Конвейер представляет собой последовательность простых команд, объединенных символом конвейера. Простейший конвейер – это любая простая команда.

3) Список состоит из конвейеров. Простейший список – это один конвейер, содержащий одну простую команду.

Код завершения конвейера равен значению кода его последней команды. Возвращаемое значение этого кода для команды или конвейера может исследоваться при управлении последовательностью выполнения в shell–программе.

3.6. Композиции команд

Существует четыре основных приема композиции команд:

  1. Последовательная схема:

$ command 1; command 2; …; command N

Здесь элементы разделены символами «;»или символ новой строки, указывающий на последовательное выполнение

  1. Условная схема:

Если две команды разделены двойным амперсантом, то вторая из них выполняется только при условии, что первая дает код завершения = 0.

&&– операторAND–IF, указывающий на условное (true) выполнение следующего конвейера, имеет следующий формат:

$ command 1 && command 2

command 2будет вызвана только тогда, когдаcommand 1завершается успешно.

Например:

$ test –d /u/user1 && echo success!

По этой команде печатается сообщение «success!», если файл/u/user1представляет собой каталог. Программаtestпредназначена для проверки различных условий. Флаг–dуказывает ей на то, что необходимо проверить является ли аргумент каталогом.

Если две команды разделены оператором ||, то вторая команда может быть выполнена, только в том случае, когда код завершения первой не равен 0.

||– операторOR–IF, указывающий на условное (false) выполнение следующего конвейера, имеет следующий формат:

$ command 1 || command 2

Интерпретатор shell вызывает command 1и проверяет код ее завершения. Еслиcommand 1не выполняется, код завершения будет ненулевым, и интерпретатор вызоветcommand 2

Например:

$ test –d /u/user1 || echo failure!

Эта команда вызовет печать сообщения «failure!» при условии, что указанный файл не существует или что он – не каталог.

true– успешное завершение, код завершения =0

false– неуспешное завершение, код завершения =1. Код может иметь несколько значений, с помощью которых определяется причина неуспешного завершения.

Многие команды UNIX вырабатывают код завершения только для поддержки этих операторов.

  1. Фоновое исполнение, когда оператор &, указывает на фоновое (асинхронное) выполнение предшествующего конвейера.

  2. Группирование команд.

При работе с интерпретатором shellоператор круглые скобки()используются для группирования команд. Т.е. вывод целой группы команд может быть целиком направлен в один канал.

(command1; command2; …)

{command1; command2; …}