Ответ
В Bash для записи условия в одну строку используется компактный синтаксис с точкой с запятой (;).
Базовый синтаксис:
if [ условие ]; then команда; fi
Практические примеры из моих скриптов:
-
Проверка существования файла или директории:
if [ -f "/etc/config.yaml" ]; then echo "Конфиг найден"; fi if [ ! -d "/backup" ]; then mkdir -p /backup; fi -
Сравнение строк и чисел:
if [ "$ENV" = "production" ]; then echo "Запуск в prod"; fi if [ $COUNT -gt 10 ]; then echo "Превышен лимит"; fi -
Использование
&&и||как альтернативыif-then-else: Это более идиоматичный способ для простых проверок.# Если условие истинно, выполнить команду [ -f "/var/run/process.pid" ] && echo "Процесс уже запущен" # Если условие ложно, выполнить команду [ -z "$HOST" ] || echo "Хост установлен в $HOST" # Аналог if-else [ "$STATUS" = "OK" ] && echo "Успех" || echo "Ошибка"Важно: Конструкция
&&и||работает на основе кода возврата предыдущей команды (0 — успех, не 0 — ошибка). -
Группировка нескольких команд с помощью
{ }:# Если файл существует, вывести его содержимое и размер [ -f "app.log" ] && { echo "--- Лог ---"; cat app.log; echo "Размер: $(wc -l < app.log) строк"; }
Рекомендация: Для сложной логики или многострочных действий лучше использовать стандартный многострочный if, так как это улучшает читаемость и поддерживаемость скрипта.
Ответ 18+ 🔞
Давай разберемся с этим однострочным цирком в баше, а то народ постоянно пытается впихнуть невпихуемое в одну строчку, а потом сам не понимает, что нагородил.
Короче, смотри. Если тебе прям позарез надо всё впихнуть в одну строку, то делается это через точку с запятой, как будто ты пишешь обычный if, но не переносишь строки.
Вот как это выглядит в лоб:
if [ условие ]; then команда; fi
Теперь живые примеры, чтобы не быть голословным:
-
Проверить файл, чтобы не облажаться:
if [ -f "/etc/config.yaml" ]; then echo "Конфиг найден"; fi if [ ! -d "/backup" ]; then mkdir -p /backup; fiТут всё просто: есть файл — окей, нет директории — создаём.
Ёпта, главное, кавычки не забывай для переменных, а то будет тебе хиросима. -
Сравнить что-нибудь:
if [ "$ENV" = "production" ]; then echo "Запуск в prod, бздеть будем"; fi if [ $COUNT -gt 10 ]; then echo "Превышен лимит, овердохуища"; fi -
А вот это, чувак, важно! Часто вместо
ifможно использовать операторы&&и||. Это как раз тот самый идиоматичный, крутой способ.# Если условие истинно (команда вернула 0), то делаем что-то справа от && [ -f "/var/run/process.pid" ] && echo "Процесс уже запущен, иди на хуй" # Если условие ложно (вернуло не 0), то делаем что-то справа от || [ -z "$HOST" ] || echo "Хост установлен в $HOST" # Аналог if-else в одну строку. Осторожно, тут есть подвох! [ "$STATUS" = "OK" ] && echo "Успех" || echo "Ошибка"С последним примером — внимание, ебать! Конструкция
команда1 && команда2 || команда3работает НЕ совсем какif-else. Есликоманда2сама завершится с ошибкой, то выполнится икоманда3. Так что для настоящегоif-elseлучше использовать нормальный синтаксис, а эту штуку — только для простейших команд, которые гарантированно не сломаются. -
Если нужно несколько команд, их можно сгруппировать в
{ }:# Если файл есть, выводим заголовок, содержимое и размер [ -f "app.log" ] && { echo "--- Лог ---"; cat app.log; echo "Размер: $(wc -l < app.log) строк"; }
Итог и моя главная рекомендация, блядь: Не гонись за одной строкой, если логика сложнее, чем «проверил — сказал». Для всего многострочного, с вложенностями и ветвлениями, используй нормальный, читаемый if-elif-else. Твой скрипт через месяц будет смотреть на тебя, как на пидараса шерстяного, и ты сам в нём ничего не поймёшь. Читаемость — это святое. Однострочники — для быстрых проверок в консоли или совсем уж простых случаев. Не делай из скрипта манду с ушами.