Когда вы пишете:
if command; then
echo "OK"
else
echo "Fail"
fi
В мире плачет один котенок…🥺 Ведь есть куда более лаконичная альтернатива:
command && echo "OK" || echo "Fail"
Это логические цепочки (&& и ||), которые позволяют писать коротко и эффективно.
▪️ Принцип short-circuit логики
Bash, как и многие языки, останавливает выполнение цепочки, если уже ясно, что дальше не нужно:
cmd1 && cmd2 - cmd2 выполняется только если cmd1 завершилась успешно (exit 0).
cmd1 || cmd2 - cmd2 выполняется только если cmd1 завершилась с ошибкой (exit ≠ 0).
▪️ Примеры таких условий
📍 Минимизация if:
mkdir newdir && cd newdir
создаст и сразу перейдёт, только если каталог успешно создан.
📍 Команда с fallback:
cp file.txt backup/ || echo "Не удалось скопировать!"
Если cp не удался - сработает echo.
📍 Успех или откат:
make build && echo "Успешно" || echo "Ошибка"
Если echo "Успешно" завершится с ошибкой (что редко, но возможно), то сработает и ||.
Чтобы избежать этого, оберните в скобки:
make build && { echo "Успешно"; } || { echo "Ошибка"; }
📍 Цепочка нескольких условий:
[ -d logs ] && cd logs && ls || echo "Нет каталога logs"
Проверяем наличие каталога
Если есть - заходим и выводим содержимое
Если нет - сообщение
📍 Проверка переменной:
[[ -n $API_KEY ]] && echo "Ключ найден" || echo "Нет ключа"
▪️Более сложные варианты использования
📍 Комбинирование условий:
[[ -f $file && -s $file ]] && echo "Файл существует и не пуст"
📍 Логическая цепочка до первой ошибки:
do_step1 && do_step2 && do_step3 || echo "Ошибка на одном из этапов"
📍 Псевдо-транзакции:
backup && update && restart || rollback
Если что-то пошло не так - rollback.
BashTex 📱 #bash #utils