← Назад к вопросам

Как в bash прописывают условие "или"

1.3 Junior🔥 112 комментариев
#Скриптинг и программирование

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Условие "ИЛИ" в Bash: синтаксис и практическое применение

В языке bash для реализации логического условия "или" используется оператор || (две вертикальные черты). Этот оператор выполняется по принципу short-circuit evaluation: если левая часть условия истинна, правая часть не проверяется, так как всё условие уже истинно.

Основные синтаксические формы

1. В конструкциях if-then-else

if [ условие1 ] || [ условие2 ]; then
    echo "Хотя бы одно условие истинно"
else
    echo "Оба условия ложны"
fi

2. В условных конструкциях [[ ]] (более современный и рекомендуемый синтаксис)

if [[ условие1 || условие2 ]]; then
    echo "Истинно"
fi

3. Для выполнения команд по условию "или" (без явного if)

команда1 || команда2
# Если команда1 завершится с ошибкой (ненулевой код возврата), выполнится команда2

Практические примеры использования

Пример 1: Проверка файлов или директорий

if [[ -f "файл.txt" ]] || [[ -d "директория" ]]; then
    echo "Объект существует (файл ИЛИ директория)"
fi

Пример 2: Проверка переменных

if [[ -z "$VAR1" ]] || [[ -z "$VAR2" ]]; then
    echo "Хотя бы одна переменная пустая"
fi

Пример 3: Комбинация с условием "И" (&&)

if [[ условие1 ]] && [[ условие2 || условие3 ]]; then
    echo "Сложное логическое условие"
fi

Особенности и рекомендации

  1. Приоритет операторов: && имеет более высокий приоритет, чем ||. Используйте скобки для группировки:
if [[ (условие1 && условие2) || условие3 ]]; then
    # Явная группировка делает код понятнее
fi
  1. Разница между [ ] и [[ ]]:
    • В [ ] нужно писать -o вместо || (устаревший синтаксис):
if [ условие1 -o условие2 ]; then
    # Работает, но менее читаемо
fi
  • [[ ]] более безопасен для обработки переменных и поддерживает более богатый синтаксис.
  1. Коды возврата: || возвращает 0 (истина), если выполнилась хотя бы одна часть условия:
true || false  # Возвращает 0
false || true  # Возвращает 0
false || false # Возвращает 1

Расширенный пример из реальной практики

#!/bin/bash

# Проверка доступности сервисов
HOST="example.com"
PORT1=80
PORT2=443

if nc -z "$HOST" "$PORT1" || nc -z "$HOST" "$PORT2"; then
    echo "Сервис доступен через HTTP ИЛИ HTTPS"
    # Действия при доступности сервиса
else
    echo "Сервис недоступен ни через HTTP, ни через HTTPS"
    # Аварийные действия или уведомления
    exit 1
fi

Ключевой совет: Для повышения читаемости сложных условий используйте явные проверки с промежуточными переменными или разбивайте на несколько if. Помните, что || в bash работает не только в условиях, но и для управления выполнением команд на уровне всего скрипта.