Условная конструкция if..then..else

Последнее обновление: 23.03.2024

Условная конструкция if..then выполняет набор команд, если только выполняется определенное условие. Она имеет следующий синтаксис:

if условие
then
    команды
fi

После if указывается условие, которое представляет команду test. После then идет набор команд, которые выполняются, если условие истинно. Заканчивается вся конструкция словом fi

Например, определим скрипт hello со следующим кодом:

#!/bin/bash
# условная конструкция if..then
a=5
b=5

if `test $a -eq $b`
then
    echo "a и b равны"
fi
echo "Конец программы"
exit 0

Здесь проверется условие test $a -eq $b, то есть равны ли переменныя a и b. Если они равны, то условие истинно, и выполняются команды после then. В данном случае это только одна команда echo, которая выводит на консоль сообщение о равенстве. После завершения конструкции if..then (после слова fi) идет еще одна команда echo.

Запустим скрипт:

eugene@Eugene:~$ bash hello
a и b равны
Конец программы
eugene@Eugene:~$ 

Итак, мы видим, что две переменные равны.

Стоит отметить, что также мы могли бы сократить условие следующим образом:

if [ $a -eq $b ]

Но теперь изменим значения переменных в скрипте

#!/bin/bash
# условная конструкция if..then
a=6
b=5

if [ $a -eq $b ]
then
    echo "a и b равны"
fi
echo "Конец программы"
exit 0

И поскольку переменные теперь не равны, соответственно условие ложно, то команды после then выполняться не будут:

eugene@Eugene:~$ bash hello
Конец программы
eugene@Eugene:~$ 

else

С помощью оператора else можно определить команды, которые выполняются, если условие ложно. Например:

#!/bin/bash
if [ $1 -eq $2 ]
then
    echo "числа равны"
else
    echo "числа НЕ равны"
fi
echo "Конец программы"
exit 0

Здесь также сравниваются два числа, только теперь не переменные, а аргументы скрипта. Если они равны, то выводится одно сообщение (после then), если не равны - то другое сообщение (после else). Протестируем скрипт, передавая ему некоторые числа при запуске:

eugene@Eugene:~$ bash hello 5 5
числа равны
Конец программы
eugene@Eugene:~$ bash hello 6 5
числа НЕ равны
Конец программы
eugene@Eugene:~$ 

elif

С помощью оператора elif можно проверять дополнительные условия и определять команды, котоорые выполняются при истинности этих условий. Этот оператор во многом аналогичен if

elif условие
then
    команды

После elif идет условие, и, если оно верно, то выполняются команды после слова then

Например, в нашем случае со сравнением двух чисел может быть три ситуации: первое число больше второго, первое число меньше второго и два числа равны. Определим скрипт, который обыгрывает все эти ситуации:

#!/bin/bash
if [ $1 -gt $2 ]
then
    echo "Первое число больше второго"
elif [ $1 -lt $2 ]
then
    echo "Первое число меньше второго"
else
    echo "Оба числа равны"
fi
echo "Конец программы"
exit 0

После if проверяем условие $1 -gt $2 ("gt" сокращение от "greater than" - больше чем). Если первое число больше второго, то выполняются инструкции после then, и конструкция if завершает работу. Если же условие неверно, то проверяется условие после elif - $1 -lt $2. Если первое число меньше второго, то выполняются инструкции после then, и конструкция if завершает работу. Если же условие неверно, то выполняются инструкции после else

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

eugene@Eugene:~$ bash hello 6 5
Первое число больше второго
Конец программы
eugene@Eugene:~$ bash hello 4 5
Первое число меньше второго
Конец программы
eugene@Eugene:~$ bash hello 5 5
Оба числа равны
Конец программы
eugene@Eugene:~$ 

Конструкция if..then..else может содержать множество выражений elif. Например:

#!/bin/bash
if [ $1 -eq 1 ]
then
    echo "число равно 1"
elif [ $1 -eq 2 ]
then
    echo "число равно 2"
elif [ $1 -eq 3 ]
then
    echo "число равно 3"
elif [ $1 -eq 4 ]
then
    echo "число равно 4"
fi
echo "Конец программы"
exit 0

В данном случае аргумент скрипта последовательно сравнивается с рядом чисел, и, если сравнение истинно, выводится то или иное сообщение.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850