В продолжение предыдущего мануала по сценариям оболочки сегодня мы разберем работу if-else в shell-скриптах.
Читайте также: Аргументы командной строки в shell-скриптах
Условное ветвление — важная часть любого языка программирования, потому что обычно нежелательно выполнять абсолютно все операторы, присутствующие в программе.
Чтобы избежать этого, нам нужен способ условного выполнения операторов, и оператор if-else в сценариях оболочки служит именно для этого.
Условия в сценариях оболочки
Операторы if-else являются важной частью условного ветвления. if-else позволяют выполнять итеративные условные операторы в коде.
С помощью if-else в сценариях можно оценить условие, а затем, исходя из результата, выполнить один из нескольких доступных наборов операторов.
По сути это позволяет выбрать ответ на результат, который выдается условным выражением.
Как работает if-else в сценариях оболочки?
Мы разобрали функцию if-else и то, почему она важна для каждого программиста. Теперь давайте посмотрим на работу условной функции, чтобы понять if-else в сценариях оболочки.
Посмотрим на синтаксис условного блока в if-else.
if [condition] then statement1 else statement2 fi
Здесь использованы четыре ключевых слова: if, then, else и fi.
- За ключевым словом if следует оператор.
- condition оценивается, чтобы решить, какое утверждение будет выполняться процессором.
- Если condition равен TRUE, процессор выполнит утверждение, которое следует за ключевым словом then. В синтаксисе оно упоминается как condition1.
- Когда условие равно FALSE, процессор выполнит утверждение ключевого слова else. В синтаксисе функции это обозначается как condition2.
Важно помнить, что сценарии оболочки чувствительны к регистру, как и на языке C. Поэтому нужно быть внимательным при использовании ключевых слов в коде.
Практические примеры
Обычно вам достаточно увидеть синтаксис функции, чтобы понять, как ее использовать. Но всегда лучше разобрать функцию на примерах, потому что они демонстрируют роль разных ее аспектов.
Ниже мы рассмотрим несколько полезных примеров if-else в сценариях оболочки.
Перед вами список полезных команд:
- && – логическое AND
- $0 – аргумент 0, то есть команда, которая используется для запуска скрипта.
- $1 – первый аргумент (измените номер, чтобы получить доступ к дополнительным аргументам)
- -eq – проверка на равенство
- -ne – проверка неравенства
- -lt – меньше, чем
- -le – меньше или равно
- -gt – больше, чем
- -ge – больше или равно
1: if-else для проверки равенства двух чисел
Лучше начать с простого, чтобы понять работу функции if-else в сценарии оболочки. Инициализируем две переменные — a и b, — а затем с помощью функции if-else проверим их равенство. Для этой задачи сценарий bash должен выглядеть следующим образом:
#!/bin/bash m=1 n=2 if [ $n -eq $m ] then echo "Both variables are the same" else echo "Both variables are different" fi
Получим следующий вывод:
Both variables are different
2: if-else для сравнения двух значений
Сравнение двух значений — распространенное использование if-else в сценариях оболочки. В скриптах вы часто будете сравнивать одну переменную с другой переменной или фиксированным значением.
Давайте инициализируем две переменные и с помощью функции if-else найдем, чье значение больше.
#!/bin/bash a=2 b=7 if [ $a -ge $b ] then echo "The variable 'a' is greater than the variable 'b'." else echo "The variable 'b' is greater than the variable 'a'." fi
Получим вывод:
The variable 'b' is greater than the variable 'a'.
3: if-else для проверки четности числа
Иногда возникают ситуации, когда нужно отделить четные числа от нечетных. Это тоже можно сделать с помощью if-else, если воспользоваться оператором modulus.
Оператор modulus делит число и возвращает остаток.
Как вы знаете, все четные числа кратны 2, поэтому с помощью следующего сценария оболочки мы сможем проверить четность/нечетность числа.
#!/bin/bash n=10 if [ $((n%2))==0 ] then echo "The number is even." else echo "The number is odd." fi
Вывод будет следующим:
The number is even
Мы взяли часть условия в двойные скобки, чтобы операция по модулю выполнялась до проверки условия.
4: if-else для подсказки пароля
Функция if-else известна своей универсальностью и широтой применения. В этом примере с помощью if-else в сценарии оболочки мы создадим интерфейс для запроса пароля.
Для этого попросим пользователя ввести пароль и сохранить его в переменной pass.
Если он совпадет с предварительно заданным паролем, который в данном примере является ‘password’, пользователь получит сообщение – “The password is correct”.
В противном случае сценарий оболочки сообщит, что пароль неверный, и попросит повторить попытку.
#!/bin/bash echo "Enter password" read pass if [ $pass="password" ] then echo "The password is correct." else echo "The password is incorrect, try again." fi
Подводим итоги
Функция if-else в сценариях оболочки дает программистам множество преимуществ. Это лучший инструмент для выполнения необходимого набора операторов на основе заранее определенных условий.
Поэтому блок if-else — одна из самых важных частей условного ветвления. При выполнении определенных операторов код будет более эффективным, а еще вы сэкономите время, которое процессор тратил бы впустую на выполнение ненужных для конкретного случая операторов.