Операторы объединения команд в 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