Используйте &&
оператор,
cmd1 && cmd2 && cmd3
В скорлупе, &&
и ||
операторы моделируются после оптимизированной реализации логических операторов в C. &&
означает оператор AND, а ||
означает ИЛИ. Unix тесно связан с C, а в C второй операнд логических операторов не оценивается, если результат уже известен из первого операнда. Например, "false && x"
является false
для любого x
, поэтому нет необходимости оценивать x
(особенно, если x
является некоторым сложным логическим выражением); аналогично для "true || x"
. Это также называется семантикой короткого замыкания .
А в Unix традиционно интерпретировать возвращаемые значения команд как true
значения "успешного завершения": код выхода 0 означает истину (успех), ненулевой - false
(сбой). Таким образом, когда первая команда в cmd1 && cmd2
возвращает значение "false"
(ненулевой статус выхода, который указывает на сбой), статус составной команды известен: сбой. Таким образом, общая интерпретация cmd1 && cmd2
может быть такой: «выполнить cmd1
И ТО, если это не удалось, cmd2
». Что именно вы хотите в своем вопросе?
Аналогично с OR: cmd1 || cmd2
можно интерпретировать как «выполнить cmd1
, ИЛИ ЕСЛИ не получится , cmd2
».
Подсказка: для более длинных цепочек &&
рассмотрите возможность включения set -e
в ваш скрипт. Это в основном меняет точку с запятой ;
в &&
, с парой особых случаев.