Bash Basics Series #7: Инструкция If Else

Сподели

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

Нека го пуснем отново със същите числа:

Изпълнение на bash скрипт, който проверява четните нечетни числа

Както можете да видите, скриптът е по-добър, тъй като също така ви казва дали числото е нечетно.

Използвайте оператор 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

Нека го пусна, за да покрия и трите случая тук:

Изпълнение на скрипт с команда bash elif

Комбинирайте множество условия с логически оператори

Дотук добре. Но знаете ли, че може да имате няколко условия в едно, като използвате логически оператори като И (&&), ИЛИ (||) и т.н.? Дава ви възможност да пишете сложни условия.

Нека напишем скрипт, който ви казва дали дадената година е високосна или не.

Помните ли условията за високосна година? Трябва да се дели на 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

💡

Забележете използването на двойни скоби [[ ]]по-горе. Задължително е, ако използвате логически оператори.

Проверете скрипта, като го стартирате с различни данни:

Пример за стартиране на bash скрипт с логически оператори в израза if

🏋️ Време за упражнения

Хайде да потренираме 🙂

Упражнение 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. Продължавай да се биеш!

Източник: itsfoss.com

Публикациите се превеждат автоматично с google translate

Loading


Сподели