yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareML SpaceВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Облако для мобильных и веб‑приложенийАналитика данных в облакеEvolution Bare MetalEvolution SSH KeysEvolution ImageСайт в облакеEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskХранение данных в облакеEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkАналитика данных в облакеEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSEvolution TagsEvolution Task HistoryCloud MonitoringCloud LoggingАренда GPUAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLРазработка и тестирование в облакеAdvanced Image Management ServiceAdvanced Auto ScalingDirect ConnectCDNCross-platform connectionAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerCloud AdvisorAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: сервер Bare MetalИнфраструктура для 1С в облакеУдаленные рабочие столыМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингVMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Поиск
Связаться с нами

Операторы if, then, else в Bash: примеры использования в Linux

Чтобы писать скрипты в Linux, нужно понимать, как работают условные операторы. Основная конструкция — If-then-else. С ее помощью можно проверять условия и управлять выполнением команд. Рассказываем, как это работает.

Инструкции
Иллюстрация для статьи на тему «Операторы if, then, else в Bash: примеры использования в Linux»
Продукты из этой статьи:
Иконка-Evolution Compute
Evolution Compute

Базовый синтаксис: основа всех условных конструкций

Условные конструкции в Bash позволяют проверять условия в скриптах и определять, являются ли они истинными (True) или ложными (False). В Bash условие считается истинным, если команда или выражение возвращает код завершения 0, и ложным — если код отличен от нуля. Главный оператор, отвечающий за это — if. Он проверяет выражения и выбирает ветку выполнения команды. 

Структура оператора if-then-else

Оператор if-then-else в Bash — конструкция, которая после проверки условий позволяет выполнять команды. Базовый шаблон может выглядеть так: 

Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

Расшифровываем:

  • if — ключевое слово в начале условного оператора. После него стоит условие, которое должно проверяться.

  • [[ условие ]] — то, что будет проверяться. Условия записываются в двойных квадратных скобках, поскольку такой синтаксис позволяет обойтись без экранирований и поддерживает разные логические операторы при работе со строками и числами.

  • then — начало блока команд, которые будут выполняться при истинном условии.

  • else — блок команд, которые выполняются при ложных условиях.

  • fi — завершение логической конструкции. Это слово if, записанное наоборот. 

Сначала проверяются условия, которые указаны в if. Если оператор возвращает True, выполняются команды блока then. Если False, то команды else (если он есть). 

Условные операторы — основа автоматизации серверных задач. Отработать навыки написания скриптов можно на виртуальных машинах Evolution Compute от Cloud.ru: гибкие конфигурации, управление через API и безопасное подключение по SSH позволяют быстро развернуть среду для тестирования и эксплуатации.

Скрипт с операторами if и elseСкрипт с операторами if и else
Запуск скриптаЗапуск скрипта

Проверка кода возврата предыдущей команды

Оператор if может проверять результат выполнения команды. Любая выполненная команда в Linux возвращает exit code — код возврата. Варианты:

  • 0 — команда выполнена успешно;

  • любое значение, кроме 0 — условие не выполнено или в процессе произошла ошибка. 

Процесс выглядит так — выполняется команда, Bash анализирует код возврата. Если выходит код 0, условие считается истинным, значит, выполняется then. Если получилось ненулевое значение, управление передается в блок else

Для примера — проверка результата команды grep:

В файле file.txt grep ищет слово «текст». Если оно есть, возвращается код 0 и выполняется then. Если слова нет, выходит ненулевой код, после чего выполняется else. 

Типы условий и операторы сравнения

В Bash оператор if поддерживает разные типы условий и специальные операторы сравнения. Рассказываем, что и как может сравниваться. 

Сравнение строк

Если нужно проверить значения переменных, аргументы команды или пользовательский ввод, Bash посимвольно сравнивает строки. Какие операторы используются:

  • = — строки равны;

  • != — строки разные;

  • -z — строка пустая;

  • -n — строка не пустая.

Пример, когда строка не пустая:

Условие считается выполненным, если в переменной name есть строка admin. 

Пример, когда строка пустая:

Сравнение чисел

Для сравнения чисел в конструкции [[ ]] применяются специальные арифметические операторы, которые отличаются от строковых. Например, знак = в [[ ]] приводит к строковому сравнению, что может вызвать логические ошибки. При этом в арифметическом контексте (( )) можно использовать привычные операторы ==, !=, >, < для сравнения чисел. Какие операторы применяются:

  • -eq — равно;

  • -ne — не равно;

  • -gt — больше;

  • -lt — меньше;

  • -ge — больше или равно;

  • -le — меньше или равно.

Пример сравнения чисел:

Если переменная count содержит число больше 10, условие считается выполненным. 

Evolution Compute
Подключайте дополнительные диски и подсети
Evolution Compute

Проверка файлов и директорий

В Bash есть тесты для проверки файловой системы. С их помощью можно определить, существует ли файл, какие действия с ним можно выполнять и является ли он директорией. Операторы:

  • -f — есть, обычный файлом;

  • -d — есть, является директорией;

  • -e — файл или директория существует;

  • -r — доступен для чтения;

  • -w — доступен для записи.

Пример проверки:

Пример проверки директории и прав доступа:

Расширенные условные конструкции

В Bash-скриптах условия обычно бывают сложными. В таких случаях можно объединять проверки. Вот примеры расширенных конструкций и логических операторов. 

Цепочка условий: оператор elif

Оператор полезен, когда нужно подряд проверить несколько взаимоисключающих условий. Проверки будут выполняться сверху вниз, пока не обнаружится первый истинный вариант. Пример: 

Вложенные условия

Такие условные конструкции используются, если одно условие логически зависит от другого. Такое часто бывает при работе с файлами и правами доступа. Пример: 

Логические операторы в условиях (&&, ||)

Такие операторы позволяют объединять несколько проверок. Оператор И (&&) означает, что все условия должны быть истинными. Пример: 

Оператор ИЛИ (||) означает, что достаточно одного истинного условия. Пример:

Альтернативные формы записи условий

В Bash для проверки условий существуют не только конструкции if … then … fi. Показываем компактные варианты, которые часто используются в коротких скриптах. 

Сокращенный синтаксис с && и ||

Это форма выполнения команды, которая основана на коде возврата предыдущей команды. Подходит для простой логики. При использовании цепочек с && и || помните, что они выполняются слева направо с одинаковым приоритетом. Для группировки условий используйте { } или ( ). Варианты:

  • команда && действие_при_успехе — вторая команда выполнится только в том случае, если первая выдаст нулевой код возврата. 

  • команда || действие_при_ошибке — второе выражение выполнится, если предыдущая команда завершится с кодом возврата, не равным нулю. 

Пример:

Переход в каталог возможен, если этот каталог был ранее успешно создан. 

Альтернативный синтаксис [ ] вместо [[ ]]

Помимо двух квадратных скобок могут быть и одинарные — [ ]. Это команда test, которая считается более старым способом проверки условий. 

Пример применения:

Внутри конструкции не поддерживаются логические операторы && и ||. К тому же, необходимо следить за правильным размещением переменных и пробелов. 

Команда test для переносимости

Команда test и ее синоним [ ] — это инструмент проверки условий, доступный во всех POSIX-совместимых системах (включая устаревшие Unix-подобные ОС). Она медленнее, чем [[ ]], и требует внимательного обращения с пробелами, но необходима для переносимости на sh или dash.

Пример:

Команда применяется в переносимых shell-скриптах вроде sh и dash, минимальных окружениях и ситуациях, где нельзя применить [[ ]].

Практические примеры из реальной жизни

Условные конструкции в Bash применяются для решения прикладных задач, например, при проверке входных данных, администрировании, работе с файлами. Разберем типовые сценарии. 

Проверка наличия аргументов скрипта

Например, нужно проверить, были ли при запуске скрипта переданы аргументы. Шаблон:

Переменная $# содержит количество аргументов командной строки. Если аргументов нет, скрипт выведет подсказку, и команда завершится с кодом ошибки 1. Это позволит предотвратить запуск с пустыми значениями.

Валидация ввода пользователя

Нужно проверять допустимость и корректность данных пользовательского ввода еще до использования. Пример проверки указанного пути:

Здесь: 

-z проверяет, что в строке есть данные, -e — что указанный путь существует. 

Обработка ошибок при работе с файлами

Перед чтением, копированием и удалением файлов нужно проверять, существуют ли эти файлы и какие для них есть права доступа. Пример проверки перед удалением:

С помощью проверки можно предотвратить случайное удаление и ошибки из-за отсутствия прав. 

Автоматизация системных задач

В администрировании операторы в Bash позволяют мониторить состояние системы и принимать решения без человеческого участия. Пример проверки наличия свободного места на диске:

Также можно проверять запуск службы systemctl is-active, контролировать наличие обновлений, перезапускать сервисы при ошибках и многое другое. 

Распространенные ошибки и лучшие практики

При использовании условных конструкций в Bash соблюдайте базовые правила, чтобы повысить надежность скриптов и сделать код предсказуемым. 

Обязательные кавычки для переменных

Заключайте переменные в Bash в кавычки, чтобы избежать лишних пробелов и пустых значений. Пример ошибки:

Если переменная name содержит пробелы или пуста, условие отработает некорректно. 

Как записать верно:

Правильные отступы для читаемости

Даже правильный код будет сложно читаться без отступов. Благодаря отступам можно быстрее найти ошибки и сделать условия наглядными. Пример правильного форматирования:

Использование (( )) для арифметических операций

При работе с числами в Bash вместо [[ ]] используйте (( )). Такой формат поддерживает инкременты и декременты, не требует ввода дополнительных символов, упрощает чтение кода. Пример записи:

Избегание избыточных проверок

Не дублируйте условия, которые уже подразумеваются по логике выполнения. Это усложнит код. Пример ошибки:

Правильный вариант:

Отладка условных конструкций

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

Ключ -x для отладки скриптов

При сложных условиях и вложенных конструкциях используйте режим трассировки. Он позволит увидеть, какие команды и в каком порядке выполняются. Пример:  

-x выводит каждую команду в терминал перед выполнением, отображает значения. Можно запустить трассировку и прямо в коде без -x: 

Добавление отладочного вывода

Перед сложными условиями старайтесь выводить значения переменных и добавлять префикс Debug. Это особенно актуально при работе с аргументами команд и пользовательским вводом. Пример отладочного вывода:

Проверка синтаксиса без выполнения

Если с выполнением скрипта возникли проблемы, проверьте синтаксис: 

Режим -n находит ошибки и проверяет правильность конструкции if / then / else / fi. 

Заключение

При написании Bash-скриптов выбирайте логического оператора в зависимости от задачи. Если проверяются два-три условия, подойдет if-elif-else. Для большего количества проверок удобнее применять case. Если нужно выполнить простые действия после удачного или неудачного завершения команды, используйте сокращенные конструкции с && или ||. 

Шпаргалка по операторам проверки:

Тип условия
Оператор
Пример
Описание
Сравнение строк
=
[[ "$name" = "admin" ]]
Проверка, равны ли строки
!=
[[ "$name" != "guest" ]]
Проверка, что строки не равны
-z
[[ -z "$var" ]]
Истинно, если строка пустая
-n
[[ -n "$var" ]]
Истинно, если строка не пустая
Сравнение чисел
-eq
[[ $count -eq 10 ]]
Равно
-ne
[[ $count -ne 0 ]]
Не равно
-gt
[[ $count -gt 10 ]]
Больше
-lt
[[ $count -lt 5 ]]
Меньше
-ge
[[ $count -ge 10 ]]
Больше или равно
-le
[[ $count -le 20 ]]
Меньше или равно
Проверка файлов и директорий
-f
[[ -f "/path/to/file" ]]
Проверка, что файл существует
-d
[[ -d "/path/to/dir" ]]
Проверка, что директория существует
-e
[[ -e "/path/to/item" ]]
Проверка существования файла или директории
-r
[[ -r "/path/to/file" ]]
Проверка, что файл доступен для чтения
-w
[[ -w "/path/to/file" ]]
Проверка, что файл доступен для записи
Логические операторы
&&
[[ -f "$file" && -r "$file" ]]
Истинно, если оба условия верны
Продукты из этой статьи:
Иконка-Evolution Compute
Evolution Compute
27 марта 2026

Вам может понравиться