- Оператор if else в Bash
- Оператор if
- Оператор if else
- Оператор if elif else
- Вложенные операторы if
- Несколько условий
- Операторы тестирования
- Выводы
- Условный оператор If/Then в Bash.
- Проверка входящих выражений
- Таблица операторов Bash для проверок значений в условиях
- Заметка
- Альтернативное условие Else
- Примеры
- Search
Оператор 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, оценивая заданные условия.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Условный оператор If/Then в Bash.
Если результатом проверки является tue, оператор if осуществляет выполнение содержащихся в нем команд.
В других языках программирования истинному утверждению соответствует число «1», а ложному «0». Bash ведет себя иначе. При проверке входящего значения или выражения истинности соответствует число «0» а ложности «1». Это связанно с тем, что результат выражения на самом деле не преобразуется к логическому типу, он является кодом возврата программы.
В Linux за успешный код завершения программы принято считать число ноль, а за ошибочный соответственно единицу.
В общем виде конструкцию применения условного оператора можно представить следующим образом «if проверяемое_выражение; then набор_команд fi».
Конструкция начинается с ключевого слова if, за которым следует выражение, требующее проверки. После проверки должно располагаться ключевое слово then, свидетельствующее о начале блока команд.
Если проверка входящих параметров располагается на одной строчке с then, после неё необходимо добавить точку с запятой «;».
Конец блока команд должен быть завершен ключевым словом fi.
#!/bin/bash #если файл существует, выводим сообщение if [[ -f '/etc/passwd' ]]; then echo "Файл с определением пользователей существует"; fi #получаем ввод и сверяемся со строкой пароля password='test67' echo -n "введите пароль: "read string if [[ $password = $string ]] then echo "Пароль введен корректно" else echo "Ошибка ввода пароля" fi
Проверка входящих выражений
Bash позволяет осуществлять проверку условий тремя способами
Выражение | Описание |
---|---|
[ выражение ] | Одинарные квадратные скобки являются псевдонимом встроенной команды test. Они позволяют сравнивать значения друг с другом, а также проверять файлы и директории на существование при указании их имен. |
[[ выражение ]] | Использование двойных кавычек в условном операторе if предпочтительнее предыдущего варианта. Они не являются псевдонимом сторонней команды, а встроены в интерпретатор Bash. Это положительно сказывается на скорости выполнения. К тому же двойные квадратные скобки позволяют использовать логические операторы && или |
(( арифметическая_операция )) | Результат арифметической операции также принимается за логическое значение. Внутри двойных круглых скобок можно использовать операторы >, =, =, != для сравнения чисел. |
Внутри выражения условного оператора if могут обрабатываться одно или несколько значений. Например, проверка существования файла требует указания одного значения — имени файла. При этом оператор проверки записывается вначале. В случае сравнения двух параметров операторы проверок записываются между ними. Ниже мы приводим список допустимых сравнений, а их использование разбирается в примере.
Таблица операторов Bash для проверок значений в условиях
Оператор | Описание |
---|---|
Сравнения чисел | |
-eq или = | Равно. |
-ge или >= | Больше или равно. |
-ne или != | Не равно. |
-gt или > | Больше. |
-lt или | Меньше. |
-le или | Меньше или равно. |
Проверка файлов | |
-f | Существует и является файлом (не директорией). |
-d | Существует и является директорией. |
-r | Доступен для чтения. |
-w | Доступен для записи. |
-x | Файл является исполняемым. |
-O | Принадлежит текущему пользователю. |
-G | Группа идентична текущему пользователю. |
Сравнение строк | |
= | Равенство строк. |
!= | Неравенство строк. |
Меньше по ASCII-коду. | |
> | Больше по ASCII-коду. |
-n | В строке больше нуля символов. |
-z | В строке ноль символов. [[ -z $ ]] |
Пример объединения проверок
#!/bin/bash #два выражения, объединенных логическим "и" if (( 4*5 > 15 )) && [ -d '/var/log/apt' ]; then echo 'Условие истинно' fi #аналогичное выражение, но с двойными скобками if [[ 4*5 -gt 15 && -d '/var/log/apt' ]]; then echo 'Условие истинно' fi #пример арифметической операции в условии number=145 divider=3 if (( $number/$divider > 30 )); then echo "$ деленное на $ равно $[$number/$divider]" fi
Заметка
Альтернативное условие Else
При использовании условного оператора if/then можно задать блок команд, который будет выполнен в случае ложности выражения. Bash позволяет сделать это за счет ключевого слова else. Поместите его в промежутке then и fi. Все команды, лежащие между else и fi, будут считаться альтернативой истинности условия.
#!/bin/bash #проверка строки на длину и совпадение code='4567' string='' echo -n 'введите проверочный код: ' read string if [[ -n $string ]]; #вложенная проверка условия if [[ $code = $string ]]; then echo 'проверочный код совпал' else echo 'код не прошел проверку' fi else echo 'слишком короткий код' fi
Примеры
if ! [ -f /path/to/file ]; then echo 'No file' fi
if test -f /path/to/file then echo 'No file' fi
if ! [ -d /path/directory/ ]; then echo 'No directory' fi
grep "username:" /etc/passwd >/dev/null if [ $? -ne 0 ]; then echo 'No username found' fi
if [[ -z "$var" ]]; then do echo "what you want" fi
if ! [[ `dpkg -l xemacs21-bin` ]]; then apt-get -y install xemacs21-bin else echo 'package present in system' fi
if command -v systemctl >/dev/null 2>&1; then echo Yes; else echo None; fi
Legible Aizaro Technical Library by DataFlex © 2021-2023
Search
From here you can search these documents. Enter your search terms below.