Bash скрипты: условные операторы if-then-else

Всем привет! Сегодня поговорим про одну из самых базовых, но чертовски важных вещей в 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 — на вкус и цвет.

Установка и подготовка (Пошаговая инструкция)

  1. Проверьте, что bash установлен:
    Откройте терминал и введите:
    bash --version
    Если увидели версию — всё ок. Если нет, ставим:

    • Debian/Ubuntu: sudo apt update && sudo apt install bash
    • CentOS/Fedora: sudo dnf install bash
    • macOS: уже есть, но если нужно обновить — brew install bash
  2. Создайте файл скрипта:
    nano myscript.sh
  3. Добавьте shebang (обязательная строка сверху):
    #!/bin/bash
  4. Дайте права на выполнение:
    chmod +x myscript.sh
  5. Запускайте скрипт:
    ./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. Чем больше практики — тем меньше граблей.
Если есть вопросы или хочется увидеть примеры для конкретных задач — пишите в комментах!

Хотите прочитать больше про Разное?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *