Как записать условный оператор if в одну строку в Bash?

«Как записать условный оператор if в одну строку в Bash?» — вопрос из категории Скриптинг и автоматизация, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Bash для записи условия в одну строку используется компактный синтаксис с точкой с запятой (;).

Базовый синтаксис:

if [ условие ]; then команда; fi

Практические примеры из моих скриптов:

  1. Проверка существования файла или директории:

    if [ -f "/etc/config.yaml" ]; then echo "Конфиг найден"; fi
    if [ ! -d "/backup" ]; then mkdir -p /backup; fi
  2. Сравнение строк и чисел:

    if [ "$ENV" = "production" ]; then echo "Запуск в prod"; fi
    if [ $COUNT -gt 10 ]; then echo "Превышен лимит"; fi
  3. Использование && и || как альтернативы if-then-else: Это более идиоматичный способ для простых проверок.

    # Если условие истинно, выполнить команду
    [ -f "/var/run/process.pid" ] && echo "Процесс уже запущен"
    
    # Если условие ложно, выполнить команду
    [ -z "$HOST" ] || echo "Хост установлен в $HOST"
    
    # Аналог if-else
    [ "$STATUS" = "OK" ] && echo "Успех" || echo "Ошибка"

    Важно: Конструкция && и || работает на основе кода возврата предыдущей команды (0 — успех, не 0 — ошибка).

  4. Группировка нескольких команд с помощью { }:

    # Если файл существует, вывести его содержимое и размер
    [ -f "app.log" ] && { echo "--- Лог ---"; cat app.log; echo "Размер: $(wc -l < app.log) строк"; }

Рекомендация: Для сложной логики или многострочных действий лучше использовать стандартный многострочный if, так как это улучшает читаемость и поддерживаемость скрипта.