- Home »

if-else в shell-скриптах — Условная логика в Bash
В этой статье разбираемся с if-else в shell-скриптах — базовой, но критически важной конструкцией для автоматизации и управления сервером. Если ты когда-нибудь задавался вопросом, как сделать скрипт умнее, чтобы он реагировал на разные ситуации (например, если сервис не запущен — запусти, если диск переполнен — отправь алерт), то ты по адресу. Здесь не будет занудных теорий — только практика, реальные кейсы, грабли и лайфхаки, которые помогут быстро освоить условную логику в Bash и сразу внедрить это в свои скрипты. Погнали!
Как работает if-else в Bash: простое объяснение
В мире Bash всё крутится вокруг команд и их кода возврата (exit status). Если команда завершилась успешно (код 0), условие считается истинным. Если что-то пошло не так (код не 0) — ложь. На этом строится вся магия if-else. Вот базовый синтаксис:
if команда; then
# действия, если команда успешна
else
# действия, если команда неуспешна
fi
Можно использовать и более сложные условия с elif
(else if), а также логические операторы (&&
, ||
, [[ ]]
и [ ]
).
Как быстро и просто всё настроить: пошагово
- Открой редактор — nano, vim, mcedit, что угодно.
- Создай файл с расширением
.sh
(например,check_service.sh
). - Добавь shebang в начало:
#!/bin/bash
- Пиши логику с if-else — смотри примеры ниже.
- Сохрани и сделай исполняемым:
chmod +x check_service.sh
- Запусти:
./check_service.sh
Примеры, схемы, практические советы
Давай разберёмся на реальных задачах, которые встречаются при администрировании серверов.
Кейс | Пример кода | Что делает | Рекомендация |
---|---|---|---|
Проверка, запущен ли сервис |
|
Если nginx не работает — запускает его | Используй для автозапуска критичных сервисов |
Проверка свободного места на диске |
|
Алерт при заполнении диска >90% | Встраивай в мониторинг, чтобы не словить out of space |
Проверка наличия файла |
|
Проверяет существование файла | Полезно для резервных копий, логов и конфигов |
Проверка переменной окружения |
|
Проверяет, что переменная не пуста | Обязательный чек для скриптов с секретами |
Положительные и отрицательные кейсы: что делать, а что — нет
Что делать | Что не делать |
---|---|
|
|
Команды и конструкции: полный список для if-else в Bash
# Базовый синтаксис
if команда; then
# действия
elif другая_команда; then
# другие действия
else
# альтернативные действия
fi
# Проверка условия с [ ]
if [ "$var" = "foo" ]; then
# ...
fi
# Проверка условия с [[ ]]
if [[ "$var" =~ ^[0-9]+$ ]]; then
# ...
fi
# Логические операторы
if [[ "$a" -gt 5 && "$b" -lt 10 ]]; then
# ...
fi
# Проверка существования файла/директории
if [ -f file.txt ]; then
# файл существует
fi
if [ -d /etc ]; then
# директория существует
fi
# Проверка переменной на пустоту
if [ -z "$var" ]; then
# переменная пуста
fi
if [ -n "$var" ]; then
# переменная не пуста
fi
# Инверсия условия
if ! команда; then
# если команда завершилась с ошибкой
fi
Похожие решения, программы и утилиты
- test — встроенная команда для проверки условий (
[ ... ]
это алиас дляtest
). - case — альтернатива if-else для множественных ветвлений (см. официальную документацию Bash).
- expr — для арифметики и сравнения чисел (устарело, но встречается).
- set -e — завершает скрипт при ошибке любой команды (но не всегда удобно для сложных сценариев).
Статистика и сравнение с другими языками/решениями
- Bash — самый популярный shell для автоматизации на Linux (по данным Stack Overflow и GitHub).
- if-else в Bash проще и короче, чем в Python или Perl, но менее выразителен для сложных условий.
- В отличие от Ansible или SaltStack, Bash-скрипты не требуют установки дополнительных пакетов — всё работает из коробки.
- Для сложных сценариев (например, с множеством вложенных условий) лучше использовать
case
или даже перейти на Python.
Интересные факты и нестандартные способы использования
- Можно использовать if-else прямо в командной строке, без скрипта:
if ping -c1 ya.ru >/dev/null; then echo "Интернет есть"; else echo "Нет интернета"; fi
- В Bash можно писать однострочные условия:
[ -f /etc/passwd ] && echo "Файл есть" || echo "Файла нет"
- Можно комбинировать условия с помощью
[[ ]]
и регулярных выражений — удобно для парсинга логов и проверки форматов. - В Bash 4+ появились ассоциативные массивы — можно строить более сложную логику с if-else и циклами.
- С помощью if-else можно реализовать простейший watchdog для сервисов — скрипт, который периодически проверяет и перезапускает упавшие процессы.
Какие новые возможности открываются и чем это поможет в автоматизации и скриптах?
- Автоматизация рутинных задач: бэкапы, мониторинг, алерты, автозапуск сервисов.
- Гибкая обработка ошибок: скрипт сам решает, что делать при сбое (перезапустить, отправить уведомление, логировать).
- Интерактивные скрипты: можно спрашивать у пользователя, что делать дальше, в зависимости от условий.
- Интеграция с cron: запускать проверки по расписанию и реагировать на события.
- Быстрая адаптация под разные окружения: один и тот же скрипт можно использовать на разных серверах, просто меняя условия.
Вывод — заключение и рекомендации
if-else — это фундамент автоматизации в Bash. Без него скрипты превращаются в набор тупых команд, которые не умеют реагировать на реальную ситуацию на сервере. Освоив условную логику, ты сможешь:
- Делать свои скрипты умнее и надёжнее
- Автоматизировать рутину и экономить время
- Быстро реагировать на сбои и нестандартные ситуации
- Строить свои мини-системы мониторинга и автозапуска
Рекомендую всегда использовать [[ ]]
для сложных условий, не забывать про кавычки вокруг переменных и обязательно обрабатывать все ветки условий. Если задача становится слишком сложной — подумай о переходе на case
или даже на Python, но для 90% серверных задач if-else в Bash — это must-have.
Если хочешь протестировать свои навыки на практике — заказывай VPS или выделенный сервер и начинай автоматизировать всё, что только можно. А если остались вопросы — смотри официальную документацию Bash или спрашивай на Stack Overflow.
Прокачивай свои скрипты, автоматизируй серверы и не забывай: хороший админ — это ленивый админ, который всё автоматизировал!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.