Выполнение нескольких команд в командной строке
В командной строке можно объединять сразу несколько команд в одну строку (в один запуск). Например, вам нужно выполнить сначала одну команду, за ней вторую и так далее. Но вы хотите сразу вбить в командной строке одну инструкцию, которая все сделает.
Выполнение команд последовательно
Например, мы хотим выполнить сначала одну команду. Затем, когда она отработает (вернет управление в командную строку), нам нужно запустить вторую команду. Для этого служит символ «;». Таким образом, если набрать в терминале:
$ command1; command2; command3
то сначала запустится первая команда command1, а когда управление вернется в терминал, то запустится вторая и так далее.
Зависимое выполнение команд
Символы && и || означают не что иное, как логическое И и ИЛИ. Поэтому когда мы пишем:
$ command1 && command2 && command3
то это означает, что команда command2 будет выполнена только в том случае, если команда command1 была выполнена успешно (вернула нулевой код завершения). Каждая следующая команда выполняется только при успешном выполнении предыдущей.
Если мы пишем:
$ 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