Существует четыре основных приема композиции команд:
1. Последовательная схема:
$ command 1; command 2; …; command N
Здесь элементы разделены символами «;» или символ новой строки, указывающий на последовательное выполнение
2. Условная схема:
Если две команды разделены двойным амперсантом, то вторая из них выполняется только при условии, что первая дает код завершения = 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 вырабатывают код завершения только для поддержки этих операторов.
3. Фоновое исполнение, когда оператор &, указывает на фоновое (асинхронное) выполнение предшествующего конвейера.
4. Группирование команд.
При работе с интерпретатором shell оператор круглые скобки () используются для группирования команд. Т.е. вывод целой группы команд может быть целиком направлен в один канал.