Условный оператор if linux

Оператор 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.

Читайте также:  Install kde debian linux

Оператор 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 в качестве оболочки по умолчанию.

Читайте также:  Install package in suse linux

Чтобы отрицать тестовое выражение, используйте оператор логического 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

Условный оператор if используется для проверки выполнения выражений(команд). Проверяемое выражение располагается после оператора if , а за ней следует оператор then, за которым следует группа операторов, которые будут выполняться, если проверяемая команда отработала успешно (вернула код завершения 0) и закрывается конструкция проверки оператором fi (т.е. как бы перевёрнутым if):

if . выражение. then команда_1_когда_выражение_отработало_без_ошибок команда_2_когда_выражение_отработало_без_ошибок . команда_N_когда_выражение_отработало_без_ошибок fi

В следующем примере командой test проверим, задана ли переменная $VAR:

if [[ $VAR ]] then echo "Переменная $VAR задана" fi

В том случае, если нужно предусмотреть случай, когда выражение отработало с ошибкой, в конструкцию if — then — fi добавляется оператор else:

if . выражение. then команда_1_когда_выражение_отработало_без_ошибок команда_2_когда_выражение_отработало_без_ошибок . команда_N_когда_выражение_отработало_без_ошибок else команда_1_когда_выражение_отработало_с_ошибоками команда_2_когда_выражение_отработало_с_ошибками . команда_N_когда_выражение_отработало_с_ошибками fi

В качестве примера создадим скрипт, который:
— принимает 2 параметра из командной строки
— командой test проверяет наличие не менее 2х параметров
— в случае, если переданы 2 параметра, вычисляет площадь прямоугольника
— а если меньше 2х параметров, выведет сообщение и выйдет с ошибкой

#!/bin/bash if [[ $1 && $2 ]] then S=$(echo "$1*$2"|bc) echo "Площадь прямоугольника со сторонами $1 и $2 равна $S см" else echo "Скрипту передано менее 2х параметров. Выходим." exit 1 fi

И ещё один пример. Продолжим предыдущий пример и добавим ещё одну проверку:
При помощи сравнения чисел, выведем сообщение, «Этот прямоугольник большой», если его площадь больше 200 см 2 , а во всех остальных случаях выведем сообщение «Этот прямоугольник маленький»:

#!/bin/bash if [[ $1 && $2 ]] then S=$(echo "$1*$2"|bc) echo "Площадь прямоугольника со сторонами $1 и $2 равна $S см" else echo "Скрипту передано менее 2х параметров. Выходим." exit 1 fi if [[ "$S" -gt "200" ]] then echo "Этот прямоугольник большой" else echo "Этот прямоугольник маленький" fi

Источник

Оцените статью
Adblock
detector