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

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

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

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

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

mycommand1; mycommand2; mycommand3

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

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

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

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

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

mycommand1 && mycommand2 && mycommand3

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

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

mycommand1 || mycommand2 || mycommand3

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

Источник

Sysadminium

Из этой статьи вы узнаете про объединение нескольких команд в одной строке. Это бывает очень полезно при работе в терминале Linux.

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

При выполнении команды запускается процесс, он получает какие-то данные из stdin, что-то делает и выводит результат в stdout, а если что-то пошло не так, то выводит ошибку в stderr. Об этом я писал в прошлой статье.

Читайте также:  Проверка целостности файловой системы linux

Но при выполнении команды происходит кое-что ещё. Когда команда выполняется то результат её выполнения записывается в особую переменную — «?«. Результат выполнения может быть:

  • Успешным. Тогда в переменную «?» запишется «0«;
  • Не успешным, то есть при выполнении были ошибки. Тогда в переменную «?» запишется не ноль, а какое-нибудь другое число. Обычно это число зависит от ошибки.

Посмотреть значение этой переменной можно с помощью команды echo. Символ «$» перед именем переменной означает то что нам нужно вывести значение переменной, а не её имя:

alex@ubu-22:~$ touch test.txt alex@ubu-22:~$ ls test.txt test.txt alex@ubu-22:~$ echo $? 0 alex@ubu-22:~$ ls test2.txt ls: cannot access 'test2.txt': No such file or directory alex@ubu-22:~$ echo $? 2

Как видно, результат выполнения первой команды равен «0«, значит все завершилось успешно. А результат выполнения второй команды равен «2«, значит в процессе её выполнения были ошибки.

Хоть эта информация не про объединение команд в одной строке, но иногда от результата выполнения предыдущей команды зависит выполнение следующей команды. Об этом вы прочитаете ниже.

Простое объединение команд

Если команды написать через точку с запятой « ; » то они выполнятся одна за другой:

alex@ubu-22:~$ ls test.txt; echo $? test.txt 0
alex@ubu-22:~$ echo "test1"; echo "test2" test1 test2

Объединение команд с условием

Можно выполнить объединение команд таким способом, что выполнение второй команды будет зависеть от результата выполнения предыдущей.

Если нужно выполнить вторую команду, только если предыдущая завершилась успешно, то нужно использовать « && «. Например:

alex@ubu-22:~$ sudo apt update && sudo apt dist-upgrade

То есть, если новые обновления нашлись, то обновить систему.

Если наоборот, нужно выполнить вторую команду, только если предыдущая завершилась с ошибкой, то нужно использовать « || «:

alex@ubu-22:~$ echo "test1" || echo "test2" test1

Как видим, первая команда выполнилась, а вторая не стала.

Это работает таким образом. Linux стремится самым коротким путем получить верный результат (то есть «0«):

  • && — логическое «И». Чтобы получить «0», нужно чтобы обе команды возвращали «0».
    • Если результат первой команды «0», то нужно попробовать выполнить вторую команду.
    • А если результат первой команды не «0», то вторую команду не имеет смысла выполнять.
    • Если результат первой команды «0», то вторую нет смысла выполнять, так как уже понятно что результатом будет «0».
    • А если результат первой команды не «0», то стоит выполнить вторую команду, вдруг её результат станет «0».

    Вывод одной команды, как параметр для другой

    Как перенаправить stdout одной команды на stdin другой, мы разобрались в прошлой статье. А как же все таки использовать stdout одной команды, как параметр для другой. Это делается вот так:

    alex@ubu-22:~$ cat `ls test.txt` 1 2 3

    То есть вторую команду вписывают в такие ` ` кавычки.

    alex@ubu-22:~$ ls apache2_2.4.52-1ubuntu4_amd64.deb crash crash.c id.txt ls-error.txt ls-out.txt test.txt ync-statusq alex@ubu-22:~$ ls | wc -w 8 alex@ubu-22:~$ echo "В каталоге `ls | wc -w` файлов" В каталоге 8 файлов

    Первая команда просто выводит список файлов в текущем каталоге.

    Вторая команда перенаправляет этот список файлов утилите wc, которая с опцией -w считает сколько в этом списке слов.

    Третья команда выводит то, что ей передали в параметре.

    Итог

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

    • команды записываются через точку с запятой « ; «. Тогда они выполняются по очереди без каких-то условий;
    • команды разделяются с помощью двух черт « || «. Тогда вторая команда выполняется, только если первая завершилось с ошибкой;
    • ещё команды можно разделить с помощью двух амперсантов « && «. При этом вторая команда выполнится, только если первая завершилась успешно.

    Ещё я показал как stdout одной команды использовать в качестве параметра для другой. Это делается с помощью кавычек ` ` .

    В этой статье я все примеры выполнял на Ubuntu 22, но они также могут быть выполнены на Debian 11.

    Источник

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

    • Главная
    • Разное
    • Java
    • JavaFX
    • Руководство по JavaFX
    • 00 Руководство по JavaFX

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

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

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

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

    mycommand1; mycommand2; mycommand3

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

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

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

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

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

    mycommand1 && mycommand2 && mycommand3

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

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

    mycommand1 || mycommand2 || mycommand3

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

    • Основные команды Linux
    • Основы работы в командной строке Linux
    • 10 команд Linux для новичков
    • Вывод списка файлов с сортировкой
    • Перезагружаем и выключаем компьютер из командной строки
    • Убиваем процессы в Linux — команды ps, kill и killall
    • Запускаем и ищем предыдущие команды в Linux
    • Несколько полезных команд Linux
    • Поиск команд Linux по ключевому слову и по названию
    • Команда Usermod в Linux
    • Команда Su в Linux (переключение пользователя)
    • Как включить и отключить учетную запись корневого пользователя в Ubuntu
    • sudo — мануал на команду ubuntu 22.04
    • Настройка сети вручную
    • PHP 7.0 и PHP 5.6 на одном сервере
    • Архивирование с помощью zip в Debian/Ubuntu/Linux. Архиватор zip.
    • Как установить PHP 5.6 в качестве дополнительного PHP-FPM и FastCGI для ISPConfig 3.1 на Ubuntu 16.04
    • Команда find: широкие возможности для поиска файлов в Linux
    • Как русифицировать Ubuntu server 16.04
    • Настройка samba в Ubuntu 16.04

    Источник

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