Условные операторы if..else командной оболочки Bash

Bash if..else Statement

12 Мая 2020 | Терминал

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

Условные операторы if..else командной оболочки Bash

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


if

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

if TEST-COMMAND
then
  STATEMENTS
fi
 
Объявление начинается с ключевым словом 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.

 

if..else

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

if..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 , 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.
 
Как правило, более эффективно использовать case оператор вместо вложенных if операторов.

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

Логические 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 - True, если FILE существует и является исполняемым.
  • -d FILE - True, если FILE существует и является каталогом.
  • -e FILE - Истинно, если FILE существует и является файлом, независимо от типа (узел, каталог, сокет и т. Д.).
  • -f FILE - True, если FILE существует и является обычным файлом (не каталогом или устройством).


Вывод

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

    Комментарии

    Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Загрузка комментариев...