- Оператор if else в Bash
- Оператор if
- Оператор if else
- Оператор if elif else
- Вложенные операторы if
- Несколько условий
- Операторы тестирования
- Выводы
- Bash If Statement – Linux Shell If-Else Syntax Example
- Syntax of if Statements
- How to Use the if Statement
- How to Use the if .. else Statement
- How to Use if..elif..else Statements
- Conclusion
Оператор if else в Bash
В этом руководстве мы познакомим вас с основами оператора if Bash и покажем, как использовать его в сценариях оболочки.
Принятие решений — одна из самых фундаментальных концепций компьютерного программирования. Как и в любом другом языке программирования, if..else if , if..else , if..elif..else и вложенные if в Bash могут использоваться для выполнения кода на основе определенного условия.
Оператор if
Bash, if условные выражения могут иметь разные формы. Самый простой оператор if принимает следующую форму:
if TEST-COMMAND then STATEMENTS fi
Оператор if начинается с ключевого слова if за которым следует условное выражение и ключевое слово then . Заявление заканчивается ключевым словом fi .
Если TEST-COMMAND значение True , STATEMENTS выполняется. Если TEST-COMMAND возвращает False , ничего не происходит, STATEMENTS игнорируется.
В общем, рекомендуется всегда делать отступ в коде и разделять блоки кода пустыми строками. Большинство людей предпочитают использовать отступы с четырьмя или двумя пробелами. Отступы и пустые строки делают ваш код более читабельным и организованным.
Давайте посмотрим на следующий пример скрипта, который проверяет, больше ли заданное число 10:
#!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." fi
Сохраните код в файл и запустите его из командной строки:
Скрипт предложит вам ввести номер. Если, например, вы введете 15, test команда будет иметь значение true потому что 15 больше 10, и будет выполнена команда echo внутри предложения then .
The variable is greater than 10.
Оператор if else
Оператор if..else Bash принимает следующую форму:
if TEST-COMMAND then STATEMENTS1 else STATEMENTS2 fi
Если TEST-COMMAND оценивается как True , STATEMENTS1 будет выполнен. В противном случае, если TEST-COMMAND возвращает значение False , то STATEMENTS2 будет выполнено. В заявлении может быть только одно предложение else .
Давайте добавим предложение else в предыдущий пример сценария:
#!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." else echo "The variable is equal or less than 10." fi
Если вы запустите код и введете число, сценарий напечатает другое сообщение в зависимости от того, больше ли число / равно 10.
Оператор if elif else
Оператор if..elif..else Bash имеет следующую форму:
if TEST-COMMAND1 then STATEMENTS1 elif TEST-COMMAND2 then STATEMENTS2 else STATEMENTS3 fi
Если TEST-COMMAND1 вычисляет значение True , то STATEMENTS1 будет выполнено. Если TEST-COMMAND2 вычисляет значение True , то STATEMENTS2 будет выполнено. Если ни одна из тестовых команд не оценивается как True , выполняется STATEMENTS2 .
В операторе может быть одно или несколько предложений elif . Предложение else является обязательным.
Условия оцениваются последовательно. Как только условие возвращает True остальные условия не выполняются, и управление программой перемещается в конец операторов if .
Добавим в предыдущий скрипт предложение elif :
#!/bin/bash echo -n "Enter a number: " read VAR if [[ $VAR -gt 10 ]] then echo "The variable is greater than 10." elif [[ $VAR -eq 10 ]] then echo "The variable is equal to 10." else echo "The variable is less than 10." fi
Вложенные операторы if
Bash позволяет гнездо , if заявления в if заявления. Вы можете разместить несколько операторов if внутри другого оператора if .
Следующий сценарий предложит вам ввести три числа и напечатает наибольшее число из трех.
#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if [[ $VAR1 -ge $VAR2 ]] then if [[ $VAR1 -ge $VAR3 ]] then echo "$VAR1 is the largest number." else echo "$VAR3 is the largest number." fi else if [[ $VAR2 -ge $VAR3 ]] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi fi
Вот как будет выглядеть результат:
Enter the first number: 4 Enter the second number: 7 Enter the third number: 2 7 is the largest number.
Несколько условий
Логические операторы OR и AND позволяют использовать несколько условий в операторах if .
Вот еще одна версия скрипта для печати наибольшего числа из трех. В этой версии вместо вложенных операторов if мы используем логический оператор AND ( && ).
#!/bin/bash echo -n "Enter the first number: " read VAR1 echo -n "Enter the second number: " read VAR2 echo -n "Enter the third number: " read VAR3 if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]] then echo "$VAR1 is the largest number." elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]] then echo "$VAR2 is the largest number." else echo "$VAR3 is the largest number." fi
Операторы тестирования
В Bash команда test принимает одну из следующих синтаксических форм:
test EXPRESSION [ EXPRESSION ] [[ EXPRESSION ]]
Чтобы сделать сценарий переносимым, лучше использовать старую команду test [ которая доступна во всех оболочках POSIX. Новая обновленная версия test команды [[ (двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.
Чтобы отрицать тестовое выражение, используйте оператор логического NOT ( ! ). При сравнении строк всегда используйте одинарные или двойные кавычки, чтобы избежать проблем с разделением слов и подстановкой слов.
Ниже приведены некоторые из наиболее часто используемых операторов:
- -n VAR — Истинно, если длина VAR больше нуля.
- -z VAR — Истинно, если VAR пуста.
- STRING1 = STRING2 — Истина, если STRING1 и STRING2 равны.
- STRING1 != STRING2 — Истина, если STRING1 и STRING2 не равны.
- INTEGER1 -eq INTEGER2 — Истина, если INTEGER1 и INTEGER2 равны.
- INTEGER1 -gt INTEGER2 — Истина, если INTEGER1 больше INTEGER2 .
- INTEGER1 -lt INTEGER2 — Истина, если INTEGER1 меньше INTEGER2 .
- INTEGER1 -ge INTEGER2 — Истинно, если INTEGER1 больше или больше INTEGER2.
- INTEGER1 -le INTEGER2 — Истинно, если INTEGER1 меньше или меньше INTEGER2 .
- -h FILE — Истина, если FILE существует и является символической ссылкой.
- -r FILE — Истинно, если FILE существует и доступен для чтения.
- -w FILE — Истина, если FILE существует и доступен для записи.
- -x FILE — Истина, если FILE существует и является исполняемым.
- -d FILE — Истина, если FILE существует и является каталогом.
- -e FILE — Истина, если FILE существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).
- -f FILE — Истина, если FILE существует и является обычным файлом (не каталогом или устройством).
Выводы
Операторы if , if..else и if..elif..else позволяют вам управлять потоком выполнения сценария Bash, оценивая заданные условия.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Bash If Statement – Linux Shell If-Else Syntax Example
Zaira Hira
When coding, you might need to make decisions based on certain conditions. Conditions are expressions that evaluate to a boolean expression ( true or false ).
Statements that help to execute different code branches based on certain conditions are known as conditional statements.
if. else is one of the most commonly used conditional statements. Like other programming languages, Bash scripting also supports if. else statements. And we will study that in detail in this blog post.
Syntax of if Statements
You can use if statements in a variety of ways. The generic structure of if statements is as follows:
- Using an if statement only: if. then. fi
- Using and if with an else statement: if. then. else. fi statements
- Using multiple else statements with if : if..elif..else..fi
How to Use the if Statement
When you are using a single if statement, the syntax is as follows:
if [ condition ] then statement fi
Let’s go through an example where we are comparing two numbers to find if the first number is the smaller one.
#! /bin/sh a=5 b=30 if [ $a -lt $b ] then echo "a is less than b" fi
If you run the above snippet, the condition if [ $a -lt $b ] evaluates to True , and the statement inside the if statement executes
How to Use the if .. else Statement
When you are using an if statement and you want to add another condition, the syntax is as follows:
if [ condition ] then statement else do this by default fi
Let’s see an example where we want to find if the first number is greater or smaller than the second one. Here, if [ $a -lt $b ] evaluates to false, which causes the else part of the code to run.
#! /bin/sh a=99 b=45 if [ $a -lt $b ] then echo "a is less than b" else echo "a is greater than b" fi
How to Use if..elif..else Statements
Let’s say you want to add further conditions and comparisons to make the code dynamic. In this case, the syntax would look like this:
if [ condition ] then statement elif [ condition ] then statement else do this by default fi
To create meaningful comparisons, we can use AND -a and OR -o as well.
In this example, we will determine the type of triangle using these conditions:
- Scalene : A triangle where every side is different in length.
- Isosceles : A triangle where 2 sides are equal.
- Equilateral : A triangle where all sides are equal.
read a read b read c if [ $a == $b -a $b == $c -a $a == $c ] then echo EQUILATERAL elif [ $a == $b -o $b == $c -o $a == $c ] then echo ISOSCELES else echo SCALENE fi
In the example above, the script would ask the user to enter the three sides of the triangle. Next, it would compare the sides and decide the triangle type.
Conclusion
You can easily branch your code based on conditions like if..else and make the code more dynamic. In this tutorial, you learned the syntax of if. else along with some examples.
I hope you found this tutorial helpful.
What’s your favorite thing you learned from this tutorial? Let me know on Twitter!
You can read my other posts here.