Thank you for reading this post, don't forget to subscribe!
Цепочка команд Linux означает объединение нескольких команд и выполнение их на основе оператора, используемого между ними. Цепочка команд в Linux — это то, когда вы пишете короткие скрипты оболочки в самой оболочке и выполняете их непосредственно из терминала. Цепочка позволяет автоматизировать процесс. Более того, необслуживаемая машина может функционировать более систематически с помощью операторов цепочки.
1. Оператор амперсанда (&)
Функция ‘&‘ — заставит команду работать в фоновом режиме. Просто введите команду с пробелом и ‘&‘. Вы можете выполнить более одной команды в фоновом режиме за один раз.
Запустите одну команду в фоновом режиме:
1 |
test@localhost:~$ ping c5 www.test.com & |
Запустите две команды в фоновом режиме одновременно:
1 |
root@localhost:/home/test<span class="hljs-comment"># apt-get update & apt-get upgrade &</span> |
2. Оператор тока с запятой (;)
Оператор точка с запятой позволяет запускать несколько команд за один раз, и выполнение команды происходит последовательно.
1 |
root@localhost:/home/test<span class="hljs-comment"># apt-get update ; apt-get upgrade ; mkdir test</span> |
Приведенная выше комбинация команд сначала выполнит обновление репозитория, затем обновит систему и, наконец, создаст каталог «test» в текущей рабочей директории.
3. Оператор AND (&&)
Оператор AND (&&) будет выполнять вторую команду только в том случае, если при выполнении первой команды SUCCEEDS, т.е. состояние выхода первой команды равно «0» — программа выполнена успешно. Эта команда очень полезна при проверке состояния выполнения последней команды.
Например, я хочу посетить сайт test.com с помощью команды links в терминале, но перед этим мне нужно проверить, является ли хост доступным или нет.
1 |
root@localhost:/home/test<span class="hljs-comment"># ping -c3 www.test.com && links www.test.com</span> |
4. Оператор OR (||)
Оператор OR (||) очень похож на оператор «else» в программировании. Вышеуказанный оператор позволяет вам выполнять вторую команду только в случае сбоя при выполнении первой команды, то есть состояние выхода первой команды равно «1» — программа выполнена НЕ успешно».
Например, я хочу выполнить «apt-get update» из учетной записи без полномочий root, и если первая команда не будет выполнена, тогда будет выполнена вторая команда «links www.test.com».
1 |
test@localhost:~$ apt-get update || links test.com |
В приведенной выше команде, поскольку пользователю не было разрешено обновить систему, это означает, что состояние выхода первой команды равно «1» и, следовательно, выполняется последняя команда «links test.com».
Что, если первая команда выполнена успешно, со статусом выхода «0«? Очевидно! Вторая команда не будет выполнена.
1 |
test@localhost:~$ mkdir test || links test.com |
Здесь пользователь создает папку «test» в своем домашнем каталоге, где ему это разрешено. Команда выполнена успешно, что дает статус выхода «0«, и, следовательно, последняя часть команды не выполняется.
5. Оператор NOT (!)
Оператор NOT (!) очень похож на оператор «кроме«. Эта команда выполнит все, кроме предоставленного условия. Чтобы понять как это работает, создайте каталог «test» в вашем домашнем каталоге и перейдите к нему с помощью команды «cd«.
1 2 |
testt<span class="hljs-variable">@localhost</span><span class="hljs-symbol">:~</span><span class="hljs-variable">$ </span>mkdir test test<span class="hljs-variable">@localhost</span><span class="hljs-symbol">:~</span><span class="hljs-variable">$ </span>cd test |
Затем создайте несколько типов файлов в папке «test».
1 |
test@localhost:~/test$ touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html |
Смотрите, мы создали все новые файлы в папке «test».
1 2 3 |
test@localhost:~/test$ ls a<span class="hljs-preprocessor">.doc</span> a<span class="hljs-preprocessor">.html</span> a<span class="hljs-preprocessor">.pdf</span> a<span class="hljs-preprocessor">.xml</span> b<span class="hljs-preprocessor">.doc</span> b<span class="hljs-preprocessor">.html</span> b<span class="hljs-preprocessor">.pdf</span> b<span class="hljs-preprocessor">.xml</span> |
Теперь удалите все файлы, за исключением файла «html» одновременно, умным способом.
1 |
test@localhost:~/test$ rm -r !(*.html) |
Просто чтобы проверить, последнее исполнение. Перечислите все доступные файлы с помощью команды ls.
1 2 |
test<span class="hljs-variable">@localhost</span><span class="hljs-symbol">:~/test</span><span class="hljs-variable">$ </span>ls a.html b.html |
6. Оператор AND-OR (&& — ||)
Вышеуказанный оператор фактически является комбинацией оператора «AND» и «OR». Это очень похоже на утверждение «если-еще».
Например, давайте сделаем ping на test.com, если успешно то выведем на экран ‘Verified‘, если ping не успешный, то выведен на экран ‘Host Down‘.
1 |
test@localhost:~/test$ ping -c3 www.test.com && <span class="hljs-built_in">echo</span> <span class="hljs-string">"Verified"</span> || <span class="hljs-built_in">echo</span> <span class="hljs-string">"Host Down"</span> |
Пример вывода
1 |
PING www.<code class="bash hljs ">test</code>.com (<span class="hljs-number">104.28</span><span class="hljs-number">.20</span><span class="hljs-number">.136</span>) <span class="hljs-number">56</span>(<span class="hljs-number">84</span>) <span class="hljs-keyword">bytes</span> <span class="hljs-operator">of</span> data. <span class="hljs-number">64</span> <span class="hljs-keyword">bytes</span> <span class="hljs-built_in">from</span> www.<code class="bash hljs ">test</code>.com (<span class="hljs-number">104.28</span><span class="hljs-number">.20</span><span class="hljs-number">.136</span>): icmp_req=<span class="hljs-number">1</span> ttl=<span class="hljs-number">55</span> <span class="hljs-built_in">time</span>=<span class="hljs-number">216</span> ms <span class="hljs-number">64</span> <span class="hljs-keyword">bytes</span> <span class="hljs-built_in">from</span> www.<code class="bash hljs ">test</code>.com (<span class="hljs-number">104.28</span><span class="hljs-number">.20</span><span class="hljs-number">.136</span>): icmp_req=<span class="hljs-number">2</span> ttl=<span class="hljs-number">55</span> <span class="hljs-built_in">time</span>=<span class="hljs-number">224</span> ms <span class="hljs-number">64</span> <span class="hljs-keyword">bytes</span> <span class="hljs-built_in">from</span> www.<code class="bash hljs ">test</code>.com (<span class="hljs-number">104.28</span><span class="hljs-number">.20</span><span class="hljs-number">.136</span>): icmp_req=<span class="hljs-number">3</span> ttl=<span class="hljs-number">55</span> <span class="hljs-built_in">time</span>=<span class="hljs-number">226</span> ms <span class="hljs-comment">--- www.<code class="bash hljs ">test</code>.com ping statistics ---</span> <span class="hljs-number">3</span> packets transmitted, <span class="hljs-number">3</span> received, <span class="hljs-number">0</span>% packet loss, <span class="hljs-built_in">time</span> <span class="hljs-number">2001</span>ms rtt <span class="hljs-built_in">min</span>/<span class="hljs-built_in">avg</span>/<span class="hljs-built_in">max</span>/mdev = <span class="hljs-number">216.960</span>/<span class="hljs-number">222.789</span>/<span class="hljs-number">226.423</span>/<span class="hljs-number">4.199</span> ms Verified |
Теперь отключите интернет-соединение и повторите ту же команду.
1 |
test@localhost:~/test$ ping -c3 www.test.com && <span class="hljs-built_in">echo</span> <span class="hljs-string">"Verified"</span> || <span class="hljs-built_in">echo</span> <span class="hljs-string">"Host Down"</span> |
Пример вывода
1 |
<span class="hljs-label">ping:</span> unknown host www<span class="hljs-preprocessor">.<code class="bash hljs ">test</code></span><span class="hljs-preprocessor">.com</span> Host Down |
7. Оператор потока PIPE (|)
Этот оператор потока PIPE очень полезен, когда выходные данные первой команды действуют как входные данные для второй команды. Например, направьте вывод команды «ls -l» на «less» и посмотрите вывод всего скрипта.
1 |
<span class="hljs-variable"><code class="bash hljs ">test</code>@localhost</span><span class="hljs-symbol">:~</span><span class="hljs-variable">$ </span>ls -l | less |
8. Оператор комбинации команд {}
Объедините две или более команд, вторая команда зависит от выполнения первой команды.
Например, проверьте, доступен ли каталог «bin», и выведите соответствующий вывод.
1 |
test@localhost:~$ [ <span class="hljs-operator">-d</span> <span class="hljs-string">"bin"</span> ] || { <span class="hljs-built_in">echo</span> Directory does not exist, creating directory now.; mkdir bin; } && <span class="hljs-built_in">echo</span> Directory exists. |
9. Оператор приоритета ()
Оператор позволяет выполнить команду в порядке приоритета.
1 |
Command_x1 && Command_x2 || Command_x3 && Command_x4 |
В приведенной выше псевдокоманде, что если Command_x1 завершится неудачно? Ни один из Command_x2, Command_x3, Command_x4 не будет выполнен, для этого мы используем оператор приоритета вот так:
1 |
(Command_x1 &&Command_x2) || (Command_x3 && Command_x4) |
В вышеприведенном скрипте, если Command_x1 завершается ошибкой, Command_x2 также завершается ошибкой, но все же выполнение Command_x3 и Command_x4 зависит от состояния выхода Command_x3.
10. Оператор конкатенации (\)
Оператор конкатенации (\), как указывает имя, используется для объединения больших команд в нескольких строках оболочки. Например, команда ниже откроет текстовый файл test(1) .txt.
1 |
test@localhost:~/Downloads$ nano test\(<span class="hljs-number">1</span>\).txt |