Условные выражения это ключевой элемент любого языка программирования. В shell-скриптах на Bash они позволяют принимать решения, выполняя одну команду, если условие истинно, и другую, если оно ложно. Это особенно важно, когда вы не хотите выполнять каждую команду безоговорочно и хотите управлять поведением вашего скрипта в зависимости от ситуации.
Что такое if-else в shell-скриптах
В Bash условный оператор if-else служит для выполнения различных блоков кода в зависимости от того, истинно ли заданное условие. Он помогает адаптировать логику скрипта под разные входные данные, условия среды или результаты предыдущих операций.
Основной синтаксис
Простейшая форма выглядит так:
if [ условие ]
then
команда1
else
команда2
fiЗдесь:
ifиthenопределяют начало блока проверки;else- ветку, выполняемую при ложном условии;fi- обязательный маркер конца блока.
Основные правила
Очень важны пробелы вокруг квадратных скобок
[ ]. Bash чувствителен к синтаксису.Переменные и команды чувствительны к регистру.
Varиvar- это разные вещи.Хотя многие конструкции работают в разных оболочках POSIX, примеры с
[[ ... ]]и(( ... ))специфичны для Bash.
Примеры использования
Ниже распространённые сценарии с пояснениями.
Проверка равенства двух чисел
#!/bin/bash
m=1
n=2
if [ "$n" -eq "$m" ]
then
echo "Обе переменные одинаковы"
else
echo "Переменные разные"
fiРезультат:
Переменные разныеОператор -eq сравнивает числовые значения переменных.
Сравнение двух чисел
#!/bin/bash
a=2
b=7
if [ "$a" -ge "$b" ]
then
echo "a больше или равно b"
else
echo "b больше a"
fiЗдесь -ge означает "больше или равно".
Проверка чётности числа
#!/bin/bash
n=10
if (( n % 2 == 0 ))
then
echo "Число чётное"
else
echo "Число нечётное"
fiИспользуется арифметическое выражение (( ... )), которое позволяет писать более чистые условия.
Простейшая проверка пароля
#!/bin/bash
echo "Введите пароль:"
read pass
if [ "$pass" = "password" ]
then
echo "Пароль верный"
else
echo "Неверный пароль, попробуйте ещё раз"
fiОператор = сравнивает строки.
Несколько условий: elif
Если нужно проверить несколько условий подряд, можно использовать elif, что делает код читаемее:
#!/bin/bash
grade=85
if [ "$grade" -ge 90 ]; then
echo "Оценка: A"
elif [ "$grade" -ge 80 ]; then
echo "Оценка: B"
elif [ "$grade" -ge 70 ]; then
echo "Оценка: C"
else
echo "Оценка: F"
fiТаким образом можно последовательно проверять диапазоны значений.
Простые бинарные решения
Частый случай выбрать одно из двух действий на основе условия:
#!/bin/bash
file_path="/path/to/your/file.txt"
if [ -f "$file_path" ]; then
echo "Файл существует"
else
echo "Файл не найден"
fiТест -f проверяет, существует ли файл по указанному пути.
Вложенные условия
При сложной логике можно вкладывать if-else друг в друга:
#!/bin/bash
num=10
if [ "$num" -ge 5 ]; then
if [ "$num" -le 15 ]; then
echo "Число в диапазоне"
else
echo "Число выше диапазона"
fi
else
echo "Число ниже диапазона"
fiТакой код сначала проверяет одно условие, а затем, при необходимости, ещё одно внутри.
Проверка прав доступа к файлу
Можно комбинировать проверки:
#!/bin/bash
file_path="/path/to/your/file.txt"
if [ -f "$file_path" ]; then
if [ -r "$file_path" ]; then
echo "Файл существует и доступен для чтения"
else
echo "Файл есть, но его нельзя прочитать"
fi
else
echo "Файл не существует"
fiТест -r проверяет право на чтение.
Валидация ввода пользователя
Пример проверки числового ввода:
#!/bin/bash
echo "Введите первое число:"
read num1
echo "Введите второе число:"
read num2
if [[ $num1 =~ ^[0-9]+$ ]] && [[ $num2 =~ ^[0-9]+$ ]]; then
echo "Оба числа корректны"
else
echo "Один или оба ввода некорректны. Введите валидные числа."
fi
Здесь используется регулярное выражение для проверки, что введены только цифры.
Часто задаваемые вопросы
Как написать простой if?
if [ условие ]; then
команды
fiНапример, чтобы проверить существование файла:
if [ -f file.txt ]; then
echo "Файл есть"
fiКак использовать несколько условий?
Через elif или логические операторы && и ||:
if [ "$var" -ge 5 ] && [ "$var" -le 15 ]; then
echo "В диапазоне"
fiЧем можно заменить if-else?
Альтернативой служит оператор case, когда нужно сравнивать переменную с несколькими шаблонами:
case $var in
1) echo "1";;
2) echo "2";;
*) echo "Другие";;
esacУсловные операторы if-else это фундаментальная часть логики bash-скриптов. Они позволяют управлять потоком выполнения, делать скрипты гибкими и адаптивными, а также эффективно обрабатывать входные данные или состояние системы.