Как использовать оператор if else в Bash в Linux

12 set 2022 4 min di lettura
Как использовать оператор if else в Bash в Linux
Indice dei contenuti

Введение

Принятие решений является одним из фундаментальных понятий компьютерного программирования. Как и в любом другом языке программирования, операторы if, if..else, if..elif..else и операторы if, вложенные в Bash, могут использоваться для выполнения кода на основе определенного условия.

В этом руководстве мы познакомим вас с основами операторов Bash if и покажем, как использовать их в сценариях оболочки.

Если заявление

Bash if условные выражения могут принимать разные формы. Базовый оператор if принимает следующую форму:

if TEST-COMMAND
 then
 STATEMENTS
 fi

Оператор if начинается с ключевого слова if, за которым следует условное выражение и ключевое слово then. Оператор заканчивается ключевым словом fi.

Если TEST-COMMAND оценивается как True, выполняется STATEMENTS. Если TEST-COMMAND возвращает False, ничего не происходит, STATEMENTS игнорируется.

Как правило, рекомендуется повторно ввести код и отделить блоки кода пустыми строками. Большинство людей предпочитают использовать отступы в 4 или 2 пробела. Отступы и пустые строки делают ваш код более читабельным и организованным.

Давайте взглянем на следующий пример скрипта, который проверяет, больше ли определенное число 10.

#!/bin/bash

 echo -n "Enter a number: "
 read VAR

 if [[ $VAR -gt 10 ]]
 then
 echo "The variable is greater than 10."
 fi

Сохраните код в файл и запустите его из командной строки:

bash test.sh

Скрипт попросит вас ввести число. Например, если вы введете 15, команда test будет оценена как true, поскольку 15 больше, чем 10, и будет выполнена команда echo внутри предложения then.

The variable is greater than 10.

Если еще заявление

Оператор Bash if..else имеет следующую форму:

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.

Если оператор elif else

Оператор Bash if..elif..else имеет следующую форму:

if TEST-COMMAND1
 then
 STATEMENTS1
 elif TEST-COMMAND2
 then
 STATEMENTS2
 else
 STATEMENTS3
 fi

Если TEST-COMMAND1 оценен как True, будет выполнен STATEMENTS1. Если TEST-COMMAND2 оценен как True, будет выполнен STATEMENTS2. Если ни одна из тестовых команд не оценивается как True, выполняется STATEMENTS3.

В операторе может быть одно или несколько предложений 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

Вложенные объявления, если

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.

Вместо использования вложенных операторов if обычно более эффективно использовать оператор case.

Несколько условий

Логика операторов 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 — True [STRING1 и STRING2 — это одно и то же.
  • STRING1!= STRING2 — Правда, STRING1 и STRING2 не равны.
  • INTEGER1 -eq INTEGER2 — True INTEGER1 и INTEGER2 совпадают.
  • INTEGER1 -gt INTEGER2 — True INTEGER1 больше, чем INTEGER2.
  • INTEGER1 -lt INTEGER2 - True INTEGER1 меньше, чем INTEGER2.
  • INTEGER1 -ge INTEGER2 — True INTEGER1 больше или равно INTEGER2.
  • INTEGER1 -le INTEGER2 - True INTEGER1 меньше или меньше, чем INTEGER2.
  • -h` ФАЙЛ` — Истинно, если ФАЙЛ существует и является символической ссылкой.
  • -r` ФАЙЛ` — Истинно, если ФАЙЛ существует и доступен для чтения.
  • -w` ФАЙЛ` — Истинно, если ФАЙЛ существует и доступен для записи.
  • -x` ФАЙЛ` — Истинно, если ФАЙЛ существует и является исполняемым.
  • -d` ФАЙЛ` — Истинно, если ФАЙЛ существует и является каталогом.
  • -e` ФАЙЛ` — True, если ФАЙЛ существует и является файлом, независимо от типа (узел, каталог, сокет и т. д.).
  • -f` ФАЙЛ` — Истинно, если ФАЙЛ существует и является обычным файлом (не каталогом или устройством).

Вывод

Объявления if, if..else и if..elif..else позволяют вам управлять потоком выполнения Bash, оценивая определенные условия.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.