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