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