В Unix существует возможность объединять несколько команд в одной командной строке. Это можно делать несколькими способами:
1. Последовательное выполнение
Команды выполняются одна за другой, независимо от результата их исполнения. В качестве разделителя выступает символ точки с запятой «;».
2. Условное выполнение (И)
Проверяется код завершения первой программы, если он равен 0, производится выполнение второй программы, и так далее. Таким образом, последняя команда выполнится только при успешном завершении всех предыдущих. В качестве разделителя выступают два амперсанда «&&».
Пример:
test -r /tmp/txt && cp /tmp/txt .
проверяется возможность чтения файла /tmp/txt и в случае успеха файл копирует в текущий каталог.
3. Условное выполнение (ИЛИ)
Проверяется код завершения первой программы, если он не равен 0, производится выполнение второй программы, и так далее. Последняя команда будет запущена только если ни одна из предыдущих не закончилась успешно. В качестве разделителя выступают две вертикальные черты «||».
Пример:
test -d /tmp/dir || mkdir /tmp/dir
проверяется существование каталога /tmp/dir и, если его нет, то каталог создаётся.
4. Конвейер
При выполнении программ связываются их стандартные выходы и входы, так что текстовые данные передаются через них последовательно, как по конвейеру.
В качестве разделителя используется символ вертикальный черты «|».
Пример:
cat file.txt | uniq | sort
Читается содержимое файла file.txt, из него удаляются повторяющиеся строки, а оставшиеся строки сортируются по алфавиту. Результат выводится на экран.