- Операторы объединения команд в Linux & | ; && ! || &&-|| \ ()
- 1. Оператор амперсанда (&)
- 2. Оператор точка с запятой (;)
- 3. Оператор AND (&&)
- 4. Оператор OR (||)
- 5. Оператор NOT (!)
- 6. Оператор AND-OR (&& — ||)
- 7. Оператор потока PIPE (|)
- 8. Оператор комбинации команд <>
- 9. Оператор приоритета ()
- 10. Оператор конкатенации (\)
- 6 операторов для цепочек командной строки оболочки Bash
- 1. && Оператор (AND оператор)
- 2. OR Оператор (||)
- 3. Оператор AND & OR (&& и ||)
- 4. Оператор PIPE (|)
- 5. Оператор точка с запятой (;)
- 6. Амперсанд Оператор (&)
Операторы объединения команд в Linux & | ; && ! || &&-|| \ ()
Цепочка команд Linux означает объединение нескольких команд и выполнение их на основе оператора, используемого между ними. Цепочка команд в Linux — это то, когда вы пишете короткие скрипты оболочки в самой оболочке и выполняете их непосредственно из терминала. Цепочка позволяет автоматизировать процесс. Более того, необслуживаемая машина может функционировать более систематически с помощью операторов цепочки.
Эта статья направлена на то, чтобы пролить свет на часто используемые операторы цепочек команд, с краткими описаниями и соответствующими примерами, которые, несомненно, повысят вашу производительность и позволят вам писать короткие и содержательные коды, помимо сокращения нагрузки на систему, в разы.
1. Оператор амперсанда (&)
Функция ‘&‘ — заставит команду работать в фоновом режиме. Просто введите команду с пробелом и ‘&‘. Вы можете выполнить более одной команды в фоновом режиме за один раз.
Запустите одну команду в фоновом режиме:
Запустите две команды в фоновом режиме одновременно:
# sudo apt update & sudo apt upgrade &
2. Оператор точка с запятой (;)
Оператор точка с запятой позволяет запускать несколько команд за один раз, и выполнение команды происходит последовательно.
# sudo apt update ; sudo apt upgrade ; mkdir test
Приведенная выше комбинация команд сначала выполнит обновление репозитория, затем обновит систему и, наконец, создаст каталог «test» в текущей рабочей директории.
3. Оператор AND (&&)
Оператор AND (&&) будет выполнять вторую команду только в том случае, если при выполнении первой команды SUCCEEDS, т.е. состояние выхода первой команды равно «0» — программа выполнена успешно. Эта команда очень полезна при проверке состояния выполнения последней команды.
Например, я хочу посетить сайт sedicomm.com с помощью команды links в терминале, но перед этим мне нужно проверить, является ли хост доступным или нет.
# ping -c3 www.sedicomm.com && links www.sedicomm.com
4. Оператор OR (||)
Оператор OR (||) очень похож на оператор «else» в программировании. Вышеуказанный оператор позволяет вам выполнять вторую команду только в случае сбоя при выполнении первой команды, то есть состояние выхода первой команды равно «1» — программа выполнена НЕ успешно».
Например, я хочу выполнить «apt-get update» из учетной записи без полномочий root, и если первая команда не будет выполнена, тогда будет выполнена вторая команда «links www.sedicomm.com».
# sudo apt update || links sedicomm.com
В приведенной выше команде, поскольку пользователю не было разрешено обновить систему, это означает, что состояние выхода первой команды равно «1» и, следовательно, выполняется последняя команда «links sedicomm.com».
Что, если первая команда выполнена успешно, со статусом выхода «0«? Очевидно! Вторая команда не будет выполнена.
# mkdir test || links sedicomm.com
Здесь пользователь создает папку «test» в своем домашнем каталоге, где ему это разрешено. Команда выполнена успешно, что дает статус выхода «0«, и, следовательно, последняя часть команды не выполняется.
5. Оператор 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»одновременно, умным способом.
Просто чтобы проверить, последнее исполнение. Перечислите все доступные файлы с помощью команды ls.
6. Оператор AND-OR (&& — ||)
Вышеуказанный оператор фактически является комбинацией оператора «AND» и «OR». Это очень похоже на утверждение «если-еще».
Например, давайте сделаем ping на obu4alka.ru, если успешно то выведем на экран ‘Verified‘, если ping не успешный, то выведен на экран ‘Host Down‘.
# ping -c3 www.obu4alka.ru && echo"Verified" || echo"Host Down"
Пример вывода
--- www.obu4alka.ru ping statistics --- 3 packets transmitted, 2 received, 33% packet loss, time 2031ms rtt min/avg/max/mdev = 15.904/15.951/15.998/0.047 ms Verified
Теперь отключите интернет-соединение и повторите ту же команду.
# ping -c3 www.obu4alka.ru && echo "Verified" || echo "Host Down"
Пример вывода
ping: unknown host www.obu4alka.ru Host Down
7. Оператор потока PIPE (|)
Этот оператор потока PIPE очень полезен, когда выходные данные первой команды действуют как входные данные для второй команды. Например, направьте вывод команды «ls -l» на «less» и посмотрите вывод всего скрипта.
8. Оператор комбинации команд <>
Объедините две или более команд, вторая команда зависит от выполнения первой команды.
Например, проверьте, доступен ли каталог «bin», и выведите соответствующий вывод.
[ -d"bin" ] || < echo Directory does not exist, creating directory now.; mkdir bin; >&& echo Directory exists.
9. Оператор приоритета ()
Оператор позволяет выполнить команду в порядке приоритета.
# 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.
10. Оператор конкатенации (\)
Оператор конкатенации (\), как указывает имя, используется для объединения больших команд в нескольких строках оболочки. Например, команда ниже откроет текстовый файл test(1) .txt.
6 операторов для цепочек командной строки оболочки Bash
Оператор цепочки – это то, что помогает запускать сразу несколько команд, так как мы выполняем скрипт, и задача завершается автоматически.
Обычно люди используют операторы Linux в скриптах оболочки, но также мы можем использовать эти операторы в командной строке оболочки.
Теперь давайте обсудим каждый Оператор один за другим.
1. && Оператор (AND оператор)
Синтаксис использования оператора AND:
Оператор выполнит вторую команду только в том случае, если команда 1 успешно выполнена.
Теперь рассмотрим синтаксис выше.
Здесь команда 2 будет выполняться только в том случае, если команда 1 выполнена успешно. Например :
Здесь, как вы можете видеть ниже, первая команда успешно завершена, тогда выполняется вторая команда df -h.
$ ping -c 5 localhost && df -h PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.067 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.086 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.085 ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.081 ms 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.086 ms --- localhost ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4100ms rtt min/avg/max/mdev = 0.067/0.081/0.086/0.007 ms Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 60K 199M 1% /run/user/1000
Теперь давайте проверим оператор AND по-другому.
Здесь я не буду выполнять первую команду и посмотрю, выполняется ли вторая команда или нет.
$ ping -c 5 local && df -h ping: unknown host local
Как вы можете видеть выше, первая команда не работает, поэтому вторая команда не выполняется.
2. OR Оператор (||)
Синтаксис использования оператора OR:
OR полностью противоположна оператору &&.
OR выполнит вторую команду только в том случае, если первая команда провалится.
Теперь давайте приведем пример:
$ ping -c 5 local || df -h ping: unknown host local Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 60K 199M 1% /run/user/1000
Как вы можете видеть выше, вторая команда выполнена, то есть «df -h», когда первая команда не удалась.
3. Оператор AND & OR (&& и ||)
Комбинация оператора && и OR (||) довольно интересна и даст вам хороший результат, если вы используете его правильно.
Комбинация этих двух операторов, как например, if … else в программировании.
Давайте приведем пример, чтобы вы получили больше представлений по этому поводу:
$ mkdir data && echo "Directory created successfully" || echo "Directory creation failed" Directory created successfully
Как вы можете видеть выше, наша первая команда успешно выполнена, поэтому мы можем получить требуемое сообщение.
4. Оператор PIPE (|)
PIPE – это своего рода оператор, который может использоваться для отображения вывода первой команды, принимая ввод второй команды.
Например, вы хотите проверить все текущие системные процессы, используя команду ps -ef. но поскольку список процессов настолько длинный, что его нельзя охватить на одном экране.
В этом случае вы можете использовать фильтр с командой more.
$ ps -ef | more UID PID PPID C STIME TTY TIME CMD 0 1 0 0 19Oct18 ?? 28:26.69 /sbin/launchd 0 47 1 0 19Oct18 ?? 0:39.18 /usr/sbin/syslogd 0 48 1 0 19Oct18 ?? 0:18.18 /usr/libexec/UserEventAgent (System) 0 51 1 0 19Oct18 ?? 0:15.91 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld 0 52 1 0 19Oct18 ?? 0:34.08 /usr/libexec/kextd 0 53 1 0 19Oct18 ?? 4:35.44 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Support/fseventsd 55 58 1 0 19Oct18 ?? 0:02.25 /System/Library/CoreServices/appleeventsd --server 0 59 1 0 19Oct18 ?? 11:23.76 /usr/sbin/systemstats --daemon 0 61 1 0 19Oct18 ?? 0:40.65 /usr/libexec/configd 0 62 1 0 19Oct18 ?? 6:05.79 /System/Library/CoreServices/powerd.bundle/powerd 0 63 1 0 19Oct18 ?? 1:16.99 /Library/PrivilegedHelperTools/com.80pct.FreedomHelper 0 67 1 0 19Oct18 ?? 3:01.31 /usr/libexec/logd
5. Оператор точка с запятой (;)
Оператор точка с запятой выполняет несколько команд одновременно последовательно, как упоминалось, и обеспечивает вывод без зависимости от успеха и отказа других команд, таких как && и OR (||).
$ ping -c 5 localhost ; ifconfig ens33 ; df -h PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.063 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.091 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.085 ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.086 ms 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.086 ms --- localhost ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4091ms rtt min/avg/max/mdev = 0.063/0.082/0.091/0.011 ms ens33 Link encap:Ethernet HWaddr 00:0c:29:ff:cd:2e inet addr:192.168.43.185 Bcast:192.168.43.255 Mask:255.255.255.0 inet6 addr: 2405:204:f017:75dd:65af:f027:85c2:88eb/64 Scope:Global inet6 addr: 2405:204:f017:75dd:f076:72b8:fd36:757f/64 Scope:Global inet6 addr: fe80::b396:d285:b5b3:81c3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:146608 errors:0 dropped:0 overruns:0 frame:0 TX packets:78275 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:188124508 (188.1 MB) TX bytes:6912561 (6.9 MB) Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 60K 199M 1% /run/user/1000
6. Амперсанд Оператор (&)
Оператор Амперсанда – это своего рода оператор, который выполняет заданные команды в фоновом режиме.
Вы можете использовать этот оператор для одновременного выполнения нескольких команд.
Вы также можете выполнять несколько команд с помощью оператора Ampersand. См. Команду ниже.
$ ping -c 5 localhost & df -h & [1] 25962 [2] 25963 $ PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.052 ms Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 56K 199M 1% /run/user/1000 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.091 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.070 ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.091 ms 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.117 ms --- localhost ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4072ms rtt min/avg/max/mdev = 0.052/0.084/0.117/0.022 ms