Поиск по сайту:
Художник — это синтез теоретика и практика (Новалис).

Заявление if..else в Bash

29.05.2019
Заявление if..else в Bash

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

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

 

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

if CONDITION
then
  STATEMENTS
fi

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

Если CONDITION оценивается как True, STATEMENTS выполняется. Если CONDITION есть False, ничего не происходит.

Давайте посмотрим на следующий пример:

#!/bin/bash

echo -n "Введите номер: "
read VAR

if [[ $VAR -gt 2019 ]]
then
  echo "Переменная больше, чем 2019."
fi

Сценарий проверит, является ли данное число больше 2019. Сохраните код в виде файла и запустите его из командной строки.

bash test.sh

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

Переменная больше, чем 2019.

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

if CONDITION
then
  STATEMENTS1
else
  STATEMENTS2
fi

Если CONDITION имеет значение True, то выполнится STATEMENTS1, в противном случае, если CONDITION равно False, то выполнится STATEMENTS2. Вы можете иметь только одно предложение else в заявлении.

Давайте добавим предложение else к предыдущему сценарию:

#!/bin/bash

echo -n "Введите число: "
read VAR

if [[ $VAR -gt 2019 ]]
then
  echo "Переменная больше, чем 2019."
else
  echo "Переменная равна или меньше 2019."
fi

Если вы запустите сценарий и введете число, сценарий напечатает другое сообщение в зависимости от того, больше это число или меньше/равно 2019.

Читать  Linux против хостинга Windows. Что лучше для WordPress?

 

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

if CONDITION1
then
  STATEMENTS1
elif CONDITION2
then
  STATEMENTS2
else
  STATEMENTS3
fi

Если значение CONDITION1 имеет True, то STATEMENTS1 будет выполнен, если значение CONDITION2 равно True, то выполнится STATEMENTS2. Если ни одно из условий не равно True, то выполнится STATEMENTS2.

Вы можете иметь одно или несколько предложений elif в заявлении. Оператор else не обязателен.

Давайте добавим предложение elif к предыдущему сценарию:

#!/bin/bash

echo -n "Введите число: "
read VAR

if [[ $VAR -gt 2019 ]]
then
  echo "Переменная больше, чем 2019."
elif [[ $VAR -eq 2019 ]]
then
  echo "Переменная равна 2019."
else
  echo "Переменная меньше, чем 2019."
fi

Bash позволяет вам вкладывать оператор if в другой оператор if. Вы можете разместить несколько операторов if внутри другого оператора if.

Следующий скрипт предложит вам ввести три числа и напечатает наибольшее число среди трех чисел.

#!/bin/bash

echo -n "Введите первое число: "
read VAR1
echo -n "Введите второй номер: "
read VAR2
echo -n "Введите третий номер: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]]
then
  if [[ $VAR1 -ge $VAR3 ]]
  then
    echo "$VAR1 наибольшее число"
  else
    echo "$VAR3 наибольшее число"
  fi
else
  if [[ $VAR2 -ge $VAR3 ]]
  then
    echo "$VAR2 наибольшее число"
  else
    echo "$VAR3 наибольшее число"
  fi
fi

Вот как будет выглядеть вывод:

Введите первое число: 4
Введите второй номер: 7
Введите третий номер: 2
7 наибольшее число
Вместо использования вложенных операторов if обычно более эффективно использовать оператор case.

Логические операторы OR и AND позволяют использовать несколько условий в выражениях if.

Читать  Linux 6.13 обеспечивает поддержку DRM для графических процессоров NVIDIA

Вот еще одна версия скрипта для печати наибольшего числа среди трех чисел. В этой версии вместо вложенных выражениях if мы будем использовать логический оператор AND (&&).

#!/bin/bash

echo -n "Введите первое число: "
read VAR1
echo -n "Введите второй номер: "
read VAR2
echo -n "Введите третий номер: "
read VAR3

if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
then
  echo "$VAR1 наибольшее число"
elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
then
  echo "$VAR2 наибольшее число"
else
  echo "$VAR3 наибольшее число"
fi

В Bash команда test принимает одну из следующих синтаксических форм:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Если вы хотите, чтобы ваш скрипт был переносимым, вы должны предпочесть использовать старую [команду test, которая доступна во всех оболочках POSIX. Новая обновленная версия команды test [[(двойные скобки) поддерживается в большинстве современных систем, использующих Bash, Zsh и Ksh в качестве оболочки по умолчанию.

Чтобы отменить выражение test, используйте логический оператор 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 существует и является обычным файлом (не каталогом или устройством).
Читать  Как сделать Chown рекурсивным в Linux

 

К настоящему времени вы должны хорошо понимать, как писать операторы if в bash. Вы также можете прочитать о том, как сравнивать строки и как проверить, существует ли файл.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Анатолий

не рассмотрен наиболее интересный случай когда в одинарных кв скобках сложное выражение из подвыражений
и условие в виде тренарного оператора.

например :
[ cond1 -a cond2 -o cond3 ] && { true cmds; } || { false cmds;}
As if seams strange it works when no ( expr ) for subexpressions used!

Это может быть вам интересно


Рекомендуемое
Интернет полон каталогов. На самом деле, ваш сайт уже может быть…

Спасибо!

Теперь редакторы в курсе.