Bash поддържа изрази if-else, така че да можете да използвате логически разсъждения във вашите скриптове на обвивката.
Общият синтаксис if-else е като този:
if [ expression ]; then
## execute this block if condition is true else go to next
elif [ expression ]; then
## execute this block if condition is true else go to next
else
## if none of the above conditions are true, execute this block
fi
Както можете да забележите:
elif
се използва за вид условие “друго ако”.- Условията if else винаги завършват с
fi
- използването на точка и запетая
;
иthen
ключова дума
Преди да покажа примерите за if и else-if, нека първо споделя общи изрази за сравнение (наричани още тестови условия).
Тестови условия
Ето операторите на тестовите условия, които можете да използвате за числено сравнение:
Състояние | Еквивалентно на true when |
---|---|
$a -lt $b | $a < $b ($a е лес Tхан $b) |
$a -gt $b | $a > $b ($a е жядец Tхан $b) |
$a и $b | $a <= $b ($a е лess или дкачество от $b) |
$a -ge $b | $a >= $b ($a е жретер или дкачество от $b) |
$a -eq $b | $a е равно на $b |
$a -ne $b | $a не е равно на $b |
Ако сравнявате низове, можете да използвате следните тестови условия:
Състояние | Еквивалентно на true when |
---|---|
“$a” = “$b” | $a е същото като $b |
“$a” == “$b” | $a е същото като $b |
“$a” != “$b” | $a е различно от $b |
-z “$a” | $a е празен |
Има и условия за проверка на типа файл:
Състояние | Еквивалентно на true when |
---|---|
-f $a | $a е файл |
-d $a | $a е директория |
-L $a | $a е връзка |
След като вече сте наясно с различните изрази за сравнение, нека ги видим в действие в различни примери.
Използвайте израз if в bash
Нека създадем скрипт, който ви казва дали дадено число е четно или не.
Ето името на моя скрипт even.sh
:
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
fi
Модулната операция (%) връща нула, когато е идеално разделена на даденото число (2 в този случай).
🚧
Обърнете специално внимание на пространството. Трябва да има място между отварящите и затварящите скоби и условията. По същия начин интервалът трябва да е преди и след условните оператори (-le, == и т.н.).
Ето какво показва, когато стартирам скрипта:
Забелязахте ли, че скриптът ви казва кога числото е четно, но не показва нищо, когато числото е нечетно? Нека подобрим този скрипт с помощта на else.
Използвайте оператор if else
Сега добавям оператор else в предишния скрипт. По този начин, когато получите ненулев модул (тъй като нечетните числа не се делят на 2), той ще влезе в блока else.
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
else
echo "Number $num is odd"
fi
Нека го пуснем отново със същите числа:

Както можете да видите, скриптът е по-добър, тъй като също така ви казва дали числото е нечетно.
Използвайте оператор elif (иначе ако).
Ето скрипт, който проверява дали даденото число е положително или отрицателно. В математиката 0 не е нито положително, нито отрицателно. Този скрипт поддържа и този факт под контрол.
#!/bin/bash
read -p "Enter the number: " num
if [ $num -lt 0 ]; then
echo "Number $num is negative"
elif [ $num -gt 0 ]; then
echo "Number $num is positive"
else
echo "Number $num is zero"
fi
Нека го пусна, за да покрия и трите случая тук:

Комбинирайте множество условия с логически оператори
Дотук добре. Но знаете ли, че може да имате няколко условия в едно, като използвате логически оператори като И (&&), ИЛИ (||) и т.н.? Дава ви възможност да пишете сложни условия.
Нека напишем скрипт, който ви казва дали дадената година е високосна или не.
Помните ли условията за високосна година? Трябва да се дели на 4, но ако се дели на 100, това не е високосна година. Ако обаче се дели на 400, годината е високосна.
Ето моят сценарий.
#!/bin/bash
read -p "Enter the year: " year
if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then
echo "Year $year is leap year"
else
echo "Year $year is normal year"
fi
💡
Забележете използването на двойни скоби [[ ]]по-горе. Задължително е, ако използвате логически оператори.
Проверете скрипта, като го стартирате с различни данни:

🏋️ Време за упражнения
Хайде да потренираме 🙂
Упражнение 1: Напишете bash shell скрипт, който проверява дължината на низа, предоставен му като аргумент. Ако не е предоставен аргумент, той отпечатва „празен низ“.
Упражнение 2: Напишете шел скрипт, който проверява дали даден файл съществува или не. Можете да предоставите пълния път на файла като аргумент или да го използвате директно в скрипта.
Подсказка: Използвайте -f за файл
Упражнение 3: Подобрете предишния скрипт, като проверите дали дадения файл е обикновен файл, директория или връзка или не съществува.
Подсказка: Използвайте -f, -d и -L
Упражнение 3: Напишете скрипт, който приема два аргумента от низ. Скриптът трябва да провери дали първият низ съдържа втория аргумент като подниз.
Подсказка: Обърнете се към предишната глава за bash низове
Можете да обсъдите вашето решение в Общността:
Практическо упражнение в Bash Basics Series #7: If Else оператори
Ако следвате поредицата Bash Basics на It’s FOSS, можете да изпратите и обсъдите отговорите на упражнението в края на главата: Колегите с опит се насърчават да предоставят своите отзиви на новите членове. Обърнете внимание, че може да има повече от един отговор на даден проблем.

Надявам се, че се наслаждавате на Bash Basics Series. В следващата глава ще научите за използването на цикли в Bash. Продължавай да се биеш!
Публикациите се превеждат автоматично с google translate