Операторы объединения команд в Linux & | ; && ! || &&-|| \ ()

Оператор амперсанда (&)

& — команда выполняется в фоновом режиме. Нужно ввести команду с пробелом и ‘&‘. Можно выполнить более одной команды в фоновом режиме за один раз.

ping c5 disweb.ru &

Запуск двух команд в фоновом режиме одновременно:

sudo apt update & sudo apt upgrade &

Оператор точка с запятой (;)

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

sudo apt update ; sudo apt upgrade ; mkdir test

Оператор AND (&&)

Оператор AND (&&) будет выполнять вторую команду только в том случае, если при выполнении первой команды SUCCEEDS, т.е. состояние выхода первой команды равно «0» — программа выполнена успешно. Эта команда очень полезна при проверке состояния выполнения последней команды.

Например, я хочу посетить сайт sedicomm.com с помощью команды links в терминале, но перед этим мне нужно проверить, является ли хост доступным или нет.

ping -c3 www.sedicomm.com && links www.sedicomm.com

Оператор OR (||)

Оператор OR (||) очень похож на оператор «else» в программировании. Вышеуказанный оператор позволяет вам выполнять вторую команду только в случае сбоя при выполнении первой команды, то есть состояние выхода первой команды равно «1» — программа выполнена НЕ успешно».

Например, я хочу выполнить «apt-get update» из учетной записи без полномочий root, и если первая команда не будет выполнена, тогда будет выполнена вторая команда «links www.sedicomm.com».

sudo apt update || links sedicomm.com

Что, если первая команда выполнена успешно, со статусом выхода «0«? Очевидно! Вторая команда не будет выполнена.

mkdir test || links sedicomm.com

Оператор NOT (!)

Оператор NOT (!) очень похож на оператор «кроме«. Эта команда выполнит все, кроме предоставленного условия. Чтобы понять как это работает, создайте каталог «sedicomm» в вашем домашнем каталоге и перейдите к нему с помощью команды «cd«.

mkdir sedicomm
cd sedicomm

Затем создайте несколько типов файлов в папке «sedicomm».

touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html

Смотрите, мы создали все новые файлы в папке «sedicomm».

ls a.doc a.html a.pdf a.xml a.doc b.html b.pdf b.xml

Теперь удалите все файлы, за исключением файла «html»одновременно, умным способом.

rm -r !(*.html)

Просто чтобы проверить, последнее исполнение. Перечислите все доступные файлы с помощью команды ls.

ls a.html b.html

Оператор AND-OR (&& — ||)

Вышеуказанный оператор фактически является комбинацией оператора «AND» и «OR». Это очень похоже на утверждение «если-еще».

Например, давайте сделаем ping на disweb.ru, если успешно то выведем на экран ‘Verified‘, если ping не успешный, то выведен на экран ‘Host Down‘.

ping -c3 disweb.ru && echo "Verified" || echo "Host Down"

Пример вывода

PING disweb.ru (62.109.11.132) 56(84) bytes of data.
64 bytes from srv1.hoverhost.ru (62.109.11.132): icmp_seq=1 ttl=61 time=0.906 ms
64 bytes from srv1.hoverhost.ru (62.109.11.132): icmp_seq=2 ttl=61 time=0.800 ms
64 bytes from srv1.hoverhost.ru (62.109.11.132): icmp_seq=3 ttl=61 time=0.791 ms

--- disweb.ru ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.791/0.832/0.906/0.057 ms
Verified

Оператор потока PIPE (|)

Этот оператор потока PIPE очень полезен, когда выходные данные первой команды действуют как входные данные для второй команды. Например, направьте вывод команды «ls -l» на «less» и посмотрите вывод всего скрипта.

ls -l | less

Оператор комбинации команд {}

Объедините две или более команд, вторая команда зависит от выполнения первой команды.

Например, проверьте, доступен ли каталог «bin», и выведите соответствующий вывод.

[ -d"bin" ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists.

Оператор приоритета ()

Оператор позволяет выполнить команду в порядке приоритета.

Command_x1 && Command_x2 || Command_x3 && Command_x4

В приведенной выше псевдокоманде, что если Command_x1 завершится неудачно? Ни один из Command_x2, Command_x3, Command_x4 не будет выполнен, для этого мы используем оператор приоритета вот так:

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

В вышеприведенном скрипте, если Command_x1 завершается ошибкой, Command_x2 также завершается ошибкой, но все же выполнение Command_x3 и Command_x4 зависит от состояния выхода Command_x3.

Оператор конкатенации (\)

Оператор конкатенации (\), как указывает имя, используется для объединения больших команд в нескольких строках оболочки. Например, команда ниже откроет текстовый файл test(1) .txt.

nano test\(1\).txt