Linux bash последовательное выполнение команд

Выполнение сразу нескольких команд в командной строке

В командной строке Linux можно объединять сразу несколько команд в одну строку (в один запуск). Например, вам нужно выполнить сначала одну команду, за ней вторую и так далее. Но вы хотите сразу вбить в командной строке одну инструкцию, которая все сделает. Для этого можно воспользоваться служебными символами.

Выполнение команд последовательно

Например, мы хотим выполнить сначала одну команду. Затем, когда она отработает (вернет управление в командную строку), нам нужно запустить вторую команду. Для этого служит символ точка с запятой ;. Таким образом, если вы выполните в терминале:

mycommand1; mycommand2; mycommand3

то сначала запустится первая команда mycommand1, а когда управление вернется в терминал, то запустится вторая и так далее.

Для теста попробуйте выполнить (в Ubuntu):

Это называется последовательным выполнением команд. Вне зависимости от того, как выполнилась предыдущая команда, вторая команда должна будет запуститься. Можно выполнять команды в зависимости от того, как отработала предыдущая для этого служат символы && и ||.

Зависимое выполнение команд

Символы && и || означают не что иное, как логическое И и ИЛИ. Поэтому когда мы пишем:

mycommand1 && mycommand2 && mycommand3

то это означает, что команда mycommand2 будет выполнена только в том случае, если команда mycommand1 была выполнена успешно. Каждая следующая команда выполняется только при успешном выполнении предыдущей.

Если выполнить конструкцию:

mycommand1 || mycommand2 || mycommand3

то команда mycommand2 будет выполнена только, если mycommand1 вернула ошибку. Каждая следующая команда запускается только если предыдущая вернула ошибку.

Источник

Выполнение нескольких команд в командной строке

В командной строке можно объединять сразу несколько команд в одну строку (в один запуск). Например, вам нужно выполнить сначала одну команду, за ней вторую и так далее. Но вы хотите сразу вбить в командной строке одну инструкцию, которая все сделает.

Выполнение команд последовательно

Например, мы хотим выполнить сначала одну команду. Затем, когда она отработает (вернет управление в командную строку), нам нужно запустить вторую команду. Для этого служит символ «;». Таким образом, если набрать в терминале:

$ command1; command2; command3

то сначала запустится первая команда command1 , а когда управление вернется в терминал, то запустится вторая и так далее.

Читайте также:  Команды для форматирования linux

Зависимое выполнение команд

Символы && и || означают не что иное, как логическое И и ИЛИ . Поэтому когда мы пишем:

$ command1 && command2 && command3

то это означает, что команда command2 будет выполнена только в том случае, если команда command1 была выполнена успешно (вернула нулевой код завершения). Каждая следующая команда выполняется только при успешном выполнении предыдущей.

Если код завершения программы или команды 0 — это означает ИСТИНА, любое другое значение (как правило, это код ошибки) — ЛОЖЬ.

$ command1 || command2 || command3

то команда command2 будет выполнена только в том случает, если command1 вернула ошибку (не нулевой код завершения). Каждая следующая команда запускается только если предыдущая вернула ошибку.

Такое поведение объясняется очень просто: интерпретируя И нет смысла выполнять вторую команду, если первая вернула ошибку. А интерпретируя ИЛИ нет смысла выполнять вторую команду если первая выполнилась с успехом.

$ sort bigdata > /tmp/sorted && mv /tmp/sorted > bigdata

Этот же результат будет получен в результате выполнения кода:

if sort bigdata > /tmp/sorted ; then mv /tmp/sorted > bigdata fi

Операторы && и || можно объединять в одной командной строке:

$ who | grep "^$name " > /dev/null && echo "$name logged on" || echo "$name not logged on"

Первая команда echo выполняется при удачном выполнении команды grep , а вторая — при неудачном.

Эти операторы часто используются в условиях if :

if command1 && command2 ; then command3 fi

Обе команды должны возвратить нулевой код завершения (логическая операция И ), чтобы выполнилась команда command3 . Этот фрагмент кода можно записать и так:

$ command1 && command2 && command3

Еще одни пример использования:

if command1 || command2 ; then command3 fi

Хотя бы одна команда должна возвратить нулевой код завершения (логическая операция ИЛИ ), чтобы выполнилась команда command3 . Этот фрагмент кода можно записать и так:

$ command1 || command2 && command3

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

  • 1С:Предприятие (31)
  • API (29)
  • Bash (43)
  • CLI (99)
  • CMS (139)
  • CSS (50)
  • Frontend (75)
  • HTML (66)
  • JavaScript (150)
  • Laravel (72)
  • Linux (143)
  • MySQL (76)
  • PHP (125)
  • React.js (66)
  • SSH (27)
  • Ubuntu (66)
  • Web-разработка (509)
  • WordPress (73)
  • Yii2 (69)
  • БазаДанных (95)
  • Битрикс (66)
  • Блог (29)
  • Верстка (43)
  • ИнтернетМагаз… (84)
  • КаталогТоваров (87)
  • Класс (30)
  • Клиент (27)
  • Ключ (28)
  • Команда (68)
  • Компонент (60)
  • Конфигурация (59)
  • Корзина (32)
  • ЛокальнаяСеть (28)
  • Модуль (34)
  • Навигация (31)
  • Настройка (137)
  • ПанельУправле… (29)
  • Плагин (33)
  • Пользователь (26)
  • Практика (99)
  • Сервер (74)
  • Событие (27)
  • Теория (104)
  • Установка (65)
  • Файл (47)
  • Форма (58)
  • Фреймворк (192)
  • Функция (36)
  • ШаблонСайта (68)
Читайте также:  Listing usb devices in linux

Источник

Операторы объединения команд в 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«, и, следовательно, последняя часть команды не выполняется.

Читайте также:  Mac and linux commands

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.

Источник

Оцените статью
Adblock
detector