Как в bash записать условие «или» (логическое ИЛИ)?

«Как в bash записать условие «или» (логическое ИЛИ)?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В bash для логического ИЛИ используется оператор ||. Его можно применять как для объединения целых команд, так и для условий внутри конструкций if.

1. Объединение условий внутри if (рекомендуемый способ):

if [[ "$USER" == "root" ]] || [[ "$EUID" -eq 0 ]]; then
    echo "Выполняется с правами суперпользователя."
fi

2. Устаревший оператор -o внутри [ ] (избегать):

if [ "$USER" = "root" -o "$EUID" -eq 0 ]; then
    echo "Выполняется с правами суперпользователя."
fi
# Способ устарел и менее надежен из-за проблем с экранированием.

3. Использование || для управления выполнением команд:

# Если команда слева завершилась с ошибкой (exit code != 0), выполнится команда справа.
apt-get update || echo "Ошибка обновления репозиториев" >&2

# Часто используется в скриптах развертывания для отката.
apply_migration || rollback_migration

Практический пример из CI/CD:

# Проверяем, что контейнер запущен ИЛИ сервис активен.
if docker inspect -f '{{.State.Running}}' my-app || systemctl is-active --quiet nginx; then
    echo "Сервис доступен."
    exit 0
else
    echo "Сервис недоступен!" >&2
    exit 1
fi