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