logo
UNIX_podibni_OS / Unix подобные ОС Лекции

Средства объединения команд

Рисунок 2.14. средства объединения команд

Существует возможность объединять несколько команд в одной командной строке. Это можно делать несколькими способами:

Последовательное выполнение

Команды выполняются одна за другой, независимо от результата их исполнения. В качестве разделителя выступает символ точки с запятой («;»).

В качестве примера можно рассмотреть составную команду mkdir /tmp/test; cd /tmp/test, которая сначала создает каталог /tmp/test, а затем делает его текущим.

Условное выполнение (И)

Проверяется код завершения первой программы, если он равен 0, производится выполнение второй программы, и так далее. Таким образом, последняя команда выполнится только при успешном завершении всех предыдущих. В качестве разделителя выступают два амперсанда («&&»).

Например, команда mkdir /tmp/test && cd /tmp/test создает каталог /tmp/test, но переход в этот каталог будет выполнен только в том случае, если при выполнении первой части не возникло ошибки (например, каталог может уже существовать, и создать его невозможно).

Условное выполнение (ИЛИ)

Проверяется код завершения первой программы, если он не равен 0, производится выполнение второй программы, и так далее. Последняя команда будет запущена, только если ни одна из предыдущих не закончилась успешно. В качестве разделителя выступают две вертикальные черты («||»).

В качестве примера можно рассмотреть составную команду test -d /tmp/test || mkdir /tmp/test, которая проверяет существование директории /tmp/test и, если её нет, создаёт её.

Конвейер

При выполнении списка команд, объединённых в конвейер, стандартный вывод команды направляется на стандартный ввод следующей за ней команды в конвейере напрямую. Передаваемые данные рассматриваются как текстовые, передача производится построчно. Таким образом возникает поток данных, проходящих через несколько команд последовательно, как по конвейеру. Этот механизм является одной из самых фундаментальных особенностей UNIX и широко используется при работе в командной стоке.

Все программы могут быть запущены одновременно, так чтобы обеспечить интерактивность вывода при прохождении данных через цепочку программ. Если одна из программ в цепочке конвейера завершится (например, в случае ошибки), остальным будет отправлен специальный сигнал (SIGPIPE).

В качестве разделителя команд в конвейере используется символ вертикальный черты («|»).

Рассмотрим пример команды cat file.txt | uniq | sort, которая читает содержимое файла file.txt, удаляет из него повторяющиеся строки и сортирует оставшиеся строки по алфавиту. Результат выводится на экран.

Современные командные оболочки позволяют строить более гибкие условные выражения (с использованием скобок и знака отрицания) из выполняющихся команд.