Как использовать операторы Bash If (с 4 примерами)
Опубликовано: 2023-05-08
if
then
fi
. Добавьте ключевые слова elif
для дополнительных условных выражений или ключевое слово else
, чтобы определить универсальный раздел кода, который выполняется, если предыдущее условное предложение не выполнялось.Все нетривиальные скрипты Bash должны принимать решения. Оператор Bash if позволяет сценарию Linux задавать вопросы и, в зависимости от ответа, запускать разные участки кода. Вот как они работают.
Что такое условное выполнение?
Во всех сценариях Bash, кроме самых тривиальных, обычно требуется, чтобы поток выполнения проходил по другому пути через сценарий в зависимости от результата решения. Это называется условным выполнением.
Один из способов решить, какую ветвь выполнения выбрать, — это использовать оператор if
. Вы можете услышать операторы if
, вызываемые операторами if then
или операторами if then else
. Это разные названия одного и того же.
Оператор if
говорит, что если что-то истинно, то сделайте это . Но если что-то ложно, сделайте это вместо этого. «Что-то» может быть многими вещами, такими как значение переменной, наличие файла или совпадение двух строк.
Условное выполнение жизненно важно для любого осмысленного сценария. Без него вы очень ограничены в том, что вы можете сделать со своим сценарием. Если он не сможет принимать осмысленные решения, вы не сможете браться за реальные проблемы и вырабатывать действенные решения.
Оператор if
вероятно, является наиболее часто используемым средством получения условного выполнения. Вот как использовать его в сценариях Bash.
СВЯЗАННЫЕ С: Как проверить, существует ли файл в сценариях Linux Bash
Пример простого оператора if
Это каноническая форма простейшего оператора if
:
если [это условие истинно] затем выполнить-эти-операторы фи
Если условие в тексте принимает значение true, выполняются строки сценария в предложении then
. Если вы просматриваете сценарии, написанные другими, вы можете увидеть оператор if
, написанный следующим образом:
если [это условие истинно]; затем выполнить-эти-операторы фи
Некоторые моменты, на которые следует обратить внимание:
- Оператор
if
завершается записьюfi
. - После первой скобки «
[
» и перед второй скобкой «]
» условного теста должен быть пробел. - Если вы собираетесь поместить ключевое слово
then
в ту же строку, что и условный тест, убедитесь, что вы используете точку с запятой »;
"после испытания.
Мы можем добавить необязательное предложение else
, чтобы выполнить некоторый код, если проверка условия окажется ложной. Предложение else
не нуждается в ключевом слове then
.
если [это условие истинно] затем выполнить-эти-операторы еще выполнить-эти-заявления-вместо фи
В этом сценарии показан простой пример оператора if
, в котором используется предложение else
. Условный тест проверяет, больше ли возраст клиента или равен 21 году. Если это так, покупатель может войти в помещение, и выполняется условие then
. Если они недостаточно старые, выполняется предложение else
, и они не допускаются.
#!/бин/баш клиент_возраст = 25 если [ $customer_age -ge 21 ] затем Эхо "Заходи". еще echo "Вы не можете войти." фи
Скопируйте приведенный выше сценарий в редактор, сохраните его как файл с именем «if-age.sh» и используйте команду chmod
, чтобы сделать его исполняемым. Вам нужно будет сделать это с каждым из сценариев, которые мы обсуждаем.
chmod +x if-age.sh
Запустим наш скрипт.
./if-age.sh
Теперь мы отредактируем файл и используем возраст меньше 21 года.
клиент_возраст = 18
Внесите это изменение в свой сценарий и сохраните изменения. Если мы запустим его сейчас, условие вернет false, и предложение else будет выполнено.
./if-age.sh
Элиф пункт
Предложение elif
добавляет дополнительные условные тесты. У вас может быть столько предложений elif
, сколько вам нужно. Они оцениваются по очереди, пока одно из них не окажется верным. Если ни один из условных тестов elif
не оказывается истинным, выполняется предложение else
, если оно присутствует.
Этот скрипт запрашивает число, а затем сообщает, четное оно или нечетное. Ноль — четное число, поэтому нам не нужно ничего проверять.
Все остальные числа проверяются путем нахождения модуля деления на два. В нашем случае модуль — это дробная часть результата деления на два. Если дробной части нет, то число делится ровно на два. Следовательно, это четное число.
#!/бин/баш echo -n "Введите число: " читать номер если [$number -eq 0] затем echo "Вы ввели ноль. Ноль - четное число." Элиф [$(($число % 2)) -eq 0 ] затем echo "Вы ввели $number. Это четное число." еще echo "Вы ввели $number. Это нечетное число." фи
Чтобы запустить этот скрипт, скопируйте его в редактор и сохраните как «if-even.sh», а затем используйте chmod, чтобы сделать его исполняемым.
Давайте запустим скрипт несколько раз и проверим его вывод.

./если-даже.ш
Это все работает нормально.
Различные формы условного теста
Скобки « []
», которые мы использовали для наших условных тестов, — это сокращенный способ вызова test
программы. Из-за этого все сравнения и тесты, поддерживаемые test
, доступны для вашего оператора if
.
Это лишь некоторые из них:
- ! выражение : Истина, если выражение ложно.
- -n строка : Истинно, если длина строки больше нуля.
- -z строка : Истинно, если длина строки равна нулю. То есть это пустая строка.
- строка1 = строка2 : Истинно, если строка1 совпадает со строкой2.
- строка1 != строка2 : Истинно, если строка1 не совпадает со строкой2.
- integer1 -eq integer2 : Истинно, если integer1 численно равно integer2
- integer1 -qt integer2 : Истинно, если integer1 численно больше, чем integer2
- integer1 -lt integer2 : Истинно, если integer1 численно меньше, чем integer2
- -d каталог : Истинно, если каталог существует.
- -e файл : Истинно, если файл существует.
- -s файл : Истинно, если файл существует с размером больше нуля.
- -r файл : Истинно, если файл существует и установлено разрешение на чтение.
- -w файл : Истинно, если файл существует и установлено разрешение на запись.
- -x файл : Истинно, если файл существует и установлено разрешение на выполнение.
В таблице «файл» и «каталог» могут включать относительные или абсолютные пути к каталогам.
Знак равенства « =
» и проверка на равенство -eq
— это не одно и то же. Знак равенства выполняет посимвольное сравнение текста. Тест на равенство выполняет численное сравнение.
Мы можем увидеть это, используя test
программу в командной строке.
тест "эта строка" = "эта строка"
проверить "эта строка" = "эта строка"
тест 1 = 001
тест 1 -eq 001
В каждом случае мы используем команду echo
для вывода кода возврата последней команды. Ноль означает истину, единицу — ложь.
Использование знака равенства « =
» дает нам ложный ответ, сравнивающий 1 с 001. Это правильно, потому что это две разные строки символов. Численно они имеют одно и то же значение — единицу, — поэтому оператор -eq
возвращает истинный ответ.
Если вы хотите использовать сопоставление с подстановочными знаками в своем условном тесте, используйте синтаксис двойной скобки « [[ ]]
».
#!/бин/баш если [[ $USER == *ve ]] затем эхо "Привет, $USER" еще echo "$USER не заканчивается на "ve"" фи
Этот скрипт проверяет имя учетной записи текущего пользователя. Если он заканчивается на « ve
», он печатает имя пользователя. Если он не заканчивается на « ve
», сценарий сообщит вам об этом и завершит работу.
./if-wild.sh
СВЯЗАННЫЕ: Условное тестирование в Bash: если, то, иначе, elif
Вложенные операторы if
Вы можете поместить оператор if
внутрь другого оператора if
.
Это вполне приемлемо, но вложенность операторов if
делает код менее удобным для чтения и более трудным для сопровождения. Если вы обнаружите, что вкладываете более двух или трех уровней операторов if
, вам, вероятно, потребуется реорганизовать логику вашего сценария.
Вот скрипт, который получает день в виде числа от одного до семи. Один — понедельник, семь — воскресенье.
Он сообщает нам часы работы магазина. Если это будний день или суббота, он сообщает, что магазин открыт. Если это воскресенье, он сообщает, что магазин закрыт.
Если магазин открыт, вложенный оператор if
выполняет вторую проверку. Если сегодня среда, это говорит нам, что он открыт только утром.
#!/бин/баш # получить день в виде числа 1..7 день=$(дата +"%u") если [ $день -le 6 ] затем ## магазин открыт если [ $день -eq 3 ] затем # Среда - полдня echo "По средам мы работаем только утром." еще # обычные дни недели и суббота echo "Мы открыты весь день." фи еще # не работает по воскресеньям echo "Сегодня воскресенье, мы закрыты." фи
Скопируйте этот скрипт в редактор, сохраните его как файл с именем «if-shop.sh» и сделайте его исполняемым с помощью команды chmod
.
Мы запустили сценарий один раз, а затем изменили часы компьютера на среду и повторно запустили сценарий. Затем мы изменили день на воскресенье и запустили его еще раз.
./if-shop.sh
./if-shop.sh
./if-shop.sh
СВЯЗАННЫЕ С: Как использовать условные тесты с двойными скобками в Linux
Случай Если
Условное выполнение — это то, что делает программирование и сценарии более мощными, а скромный оператор if
вполне может быть наиболее часто используемым способом переключения пути выполнения в коде. Но это не значит, что это всегда ответ.
Написание хорошего кода означает знание того, какие варианты у вас есть и какие из них лучше всего использовать для решения конкретного требования. Оператор if
великолепен, но не позволяйте ему быть единственным инструментом в вашей сумке. В частности, ознакомьтесь с оператором case
, который может быть решением в некоторых сценариях.
СВЯЗАННЫЕ С: Как использовать операторы case в сценариях Bash