Всем привет! Сегодня поговорим про одну из самых базовых, но чертовски важных вещей в bash-скриптах — условные операторы if-then-else. Если вы только начинаете ковыряться в автоматизации на bash или уже пишете свои костыли для деплоя, без этих конструкций никуда. Это как соль на кухне — вроде мелочь, а без неё всё несъедобно.
Зачем вообще нужны if-then-else?
Условные операторы — это мозги вашего скрипта. Хотите выполнять действия только при определённых условиях? Проверять, существует ли файл, или совпадает ли переменная с нужным значением? Вот тут и вступает в игру if. Без них bash-скрипты — просто набор команд. С ними — уже почти искусственный интеллект (ну, почти).
Что потребуется
- Операционная система: Любая UNIX-подобная (Linux, macOS, даже WSL под Windows пойдёт).
- Железо: Любое, что тянет bash (а это практически всё, даже Raspberry Pi Zero).
- Bash: Обычно установлен по умолчанию. Проверить можно командой
bash --version. - Текстовый редактор: nano, vim, emacs, VSCode — на вкус и цвет.
Установка и подготовка (Пошаговая инструкция)
- Проверьте, что bash установлен:
Откройте терминал и введите:
bash --version
Если увидели версию — всё ок. Если нет, ставим:- Debian/Ubuntu:
sudo apt update && sudo apt install bash - CentOS/Fedora:
sudo dnf install bash - macOS: уже есть, но если нужно обновить —
brew install bash
- Debian/Ubuntu:
- Создайте файл скрипта:
nano myscript.sh - Добавьте shebang (обязательная строка сверху):
#!/bin/bash - Дайте права на выполнение:
chmod +x myscript.sh - Запускайте скрипт:
./myscript.sh
Использование: полный список вариантов if-then-else
Вот где начинается магия. Синтаксис условных операторов в bash можно крутить как угодно.
Базовый синтаксис:
if [ условие ]; then
# команды, если истина
fi
С else:
if [ условие ]; then
# если истина
else
# если ложь
fi
С elif (else if):
if [ условие1 ]; then
# если условие1 истина
elif [ условие2 ]; then
# если условие2 истина
else
# если ничего не подошло
fi
Примеры условий:
- Сравнение чисел:
-eq,-ne,-lt,-le,-gt,-ge - Сравнение строк:
=,!=,-z(пустая строка),-n(непустая) - Проверка файлов:
-f(файл),-d(директория),-e(существует),-r(читается),-w(записывается)
if [ -f "/etc/passwd" ]; then
echo "Файл существует"
else
echo "Файла нет"
fi
Альтернативный синтаксис (двойные скобки):
if [[ $VAR == "значение" ]]; then
echo "Совпало!"
fi
Двойные скобки чуть более гибкие, поддерживают regex и не требуют кавычек вокруг переменных.
Операторы И и ИЛИ:
if [[ $USER == "root" ]] && [[ -d "/root" ]]; then
echo "Вы root и у вас есть /root"
fi
if [[ $VAR -eq 1 ]] || [[ $VAR -eq 2 ]]; then
echo "VAR равен 1 или 2"
fi
Больше про условия можно найти в официальной документации Bash.
Типичные ошибки и как делать не надо
- Пробелы!
[ $VAR == "foo" ]— между скобками и условием ОБЯЗАТЕЛЬНЫ пробелы.
НЕПРАВИЛЬНО:[ $VAR=="foo" ]
ПРАВИЛЬНО:[ "$VAR" == "foo" ] - Кавычки вокруг переменных — всегда оборачивайте переменные в кавычки, чтобы избежать проблем с пробелами и спецсимволами.
НЕПРАВИЛЬНО:[ $VAR == foo ]
ПРАВИЛЬНО:[ "$VAR" == "foo" ] - Сравнение чисел и строк:
-eqи друзья — только для чисел,==— для строк. - Опечатки в elif:
elif, а неelseifилиelse if. - Забыли fi: Каждый
ifдолжен заканчиватьсяfi.
Реальный пример из жизни (devops-окружение)
#!/bin/bash
SERVICE="nginx"
if systemctl is-active --quiet $SERVICE; then
echo "$SERVICE работает, всё ок"
else
echo "$SERVICE не работает, пытаюсь запустить..."
systemctl start $SERVICE
if systemctl is-active --quiet $SERVICE; then
echo "$SERVICE успешно запущен"
else
echo "Ошибка: $SERVICE не удалось запустить!" >&2
exit 1
fi
fi
Вот так можно автоматизировать мониторинг и перезапуск сервисов на сервере. Скрипт проверяет, работает ли nginx, если нет — пытается запустить и валит ошибку, если не получилось.
Заключение
Условные операторы — это фундамент любого bash-скрипта. С ними ваши скрипты становятся умнее и гибче, можно автоматизировать хоть что. Главное — не забывайте про пробелы, кавычки и не стесняйтесь читать официальную документацию Bash. Чем больше практики — тем меньше граблей.
Если есть вопросы или хочется увидеть примеры для конкретных задач — пишите в комментах!
Ваш отзыв