Во многих языках программирования присутствуют условные операторы, такие как if-else
. Помимо этого, операторы if-else
также присутствуют в командной оболочке Bash, которая по умолчанию используется практически во всех современных дистрибутивах Linux. Операторы if-else
используются для проверки условий — они позволяют выполнять определенные команды в зависимости от того, истинно или ложно заданное условие. При этом операторы if-else
работают точно так же, как и в любом языке программирования.
В данной статье мы рассмотрим использование операторов if-else
в оболочке Bash на практических примерах.
Оператор if
в Bash — это условная конструкция, которая позволяет выполнять определенные команды или действия в зависимости от истинности заданного условия. В качестве проверки на истину используются два логических оператора: True (истина) и False (ложь). Оператор if
используется, когда необходимо проверить только условие. Оператор if
используется для контроля потоков выполнения скриптов, позволяя принимать решения на основе значений переменных, результатов команд и других условий.
Оператор if
имеет следующий алгоритм работы:
Сначала программа проверяет условие (под условием можно понимать как команду, так и некое математическое выражение), которое содержится в операторе if
;
Если условие истинно (возвращает True), то будут выполняться условия, которые перечислены после ключевого слова then
;
Если условие ложно (возвращает False), то программа перейдет к выполнению следующих операторов, которые перечислены после оператора м.
Схема работы оператора if
изображена на скриншоте ниже:
Синтаксис оператора if
в bash выглядит следующим образом:
if [условие]; then
# команды, выполняемые, если условие истинно>
fi
Разберем принцип работы оператора if
на простейшем практическом примере. Создадим скрипт, который будет запрашивать у пользователя число, и если введенное число будет больше 10, то в ответ система вернет сообщение «Число больше 10».
1) Создаем новый файл с расширением .sh
, например, при помощи редактора nano:
nano greater_than_10.sh
2) Вставляем следующий код:
#!/bin/bash
read -p "Введите число: " number
if [ $number -gt 10 ]; then
echo "Число больше 10."
fi
3) Предоставляем файлу права на выполнение:
chmod +x greater_than_10.sh
4) Далее запускаем скрипт:
./greater_than_10.sh
Вводим любое число, например, 32, и нажимаем на клавишу Enter:
Число 32 больше чем число 10, и так как данное условие вернуло истину (True), то была выведена команда echo
.
Разберем скрипт немного подробнее:
Условия записываются в квадратных скобках. В данном примере используются ключи -gt
(greater than, «больше чем» — эквивалент знака >
);
Далее происходит проверка условия. Если условие истинно (True), то будет выполнена команда, указанная после ключевого слова then
.
Скрипт будет завершен, о чем говорит ключевое слово fi
в конце.
Однако, данный скрипт обладает одним серьезным недостатком — отсутствует условие, при котором вводимое число будет меньше 10. Если ввести, например, 2, то скрипт ничего не вернет, так как не задано соответствующее условие:
Для решения данной проблемы используется оператор else
, о котором мы поговорим в следующей главе.
В предыдущем разделе мы запускали скрипт, в котором было задано только одно условие в операторе if
— истина (True), в то время как для условия ложь (False) ничего не было задано. Соответственно, если было введено значение, которое приводит ко лжи, то ответа нет. Если мы хотим, чтобы скрипт выполнял определенные действия при условии лжи (False), то необходимо использовать оператор else
, который указывается после инструкции if
.
Оператор if-else
в Bash используется для выполнения условных операций. Он позволяет выполнять определенные команды в зависимости от того, истинно или ложно заданное условие. Синтаксис if-else
следующий:
if [ условие ]; then
# команды, выполняемые, если условие истинно
else
# команды, выполняемые, если условие ложно
fi
Также стоит помнить, что ключевые слова, включая if
, else
, в сценариях оболочки Bash являются регистрозависимыми. Будьте внимательны при использовании ключевых слов в файлах скриптах.
Схема работы операторов if-else
изображена ниже:
Рассмотрим использование операторов if-else
на практическом примере. Для этого создадим скрипт, который будет запрашивать у пользователя число, а система будет выводить сообщение — больше это число 10 или меньше.
1) Создаем новый файл с расширением .sh
:
nano check.sh
2) Вставляем следующий код:
#!/bin/bash
read -p "Введите число: " number
if [ $number -gt 10 ]; then
echo "Число больше 10."
else
echo "Число меньше или равно 10."
fi
3) Предоставляем файлу права на выполнение:
chmod +x check.sh
4) Далее запускаем скрипт:
./check.sh
Алгоритм работы скрипта следующий:
После ключевого слова if
в квадратных скобках указывается условие. В данном примере используются ключи -gt
, («больше чем», эквивалент знака >
);
Далее происходит проверка условия. Если условие истинно (True), то будет выполнена команда, указанная после ключевого слова then
, — в данном случае будет выведено сообщение «Число больше 10». Если же условие ложно (False), то будет выполняться команда после ключевого слова else
— в данном случае будет выведено сообщение «Число меньше или равно 10».
Как только одно из условий будет выполнено, программа будет завершена, о чем говорит ключевое слово fi
в конце.
Результат работы, если введенное число больше 10:
Результат работы, если введенное число меньше 10:
Рассмотрим применение оператора if-else
в Bash на практических примерах, которые можно использовать при написании скриптов.
Для начала создадим скрипт который будет проверять, запущен ли файл скрипта от имени пользователя root
или нет. Это может быть полезно при написании скриптов, которые предполагают выполнение действий, например, установку пакетов от имени root
-пользователя.
1) Создаем файл с именем check-for-root.sh
:
nano check-for-root.sh
2) Используем следующий код для проверки на root
-пользователя:
#!/bin/bash
if [[ $EUID -ne 0 ]]; then
/usr/bin/printf "${R}>>>>${NC} Please run as root\n"
exit 1
fi
3) Предоставляем файлу права на выполнение:
chmod +x check-for-root.sh
И запускаем:
./check-for-root.sh
Если скрипт будет запущен от имени обычного пользователя, то будет выведено сообщение «Please run as root» (см. скриншот выше).
Для проверки на root
-пользователя используется конструкция вида $EUID -ne 0
, где:
$EUID
— переменная окружения, в которой хранится числовой идентификатор учетной записи. В Linux-системах root
-пользователю всегда присваивается идентификатор с цифрой 0, в то время как для других учетных записей, в частности для пользовательских, идентификация начинается с 1000.-ne
— операция сравнения, которая означает «не равно (not equal)». Вместо буквенного обозначения можно использовать символ !=
.Теперь создадим другой скрипт, который будет проверять, какой дистрибутив Linux используется. Если скрипт запускается на дистрибутиве Ubuntu, то будет выведено сообщение «This is Ubuntu». Если же скрипт запускается на любом другом дистрибутиве Linux, то будет выведено сообщение «Not Ubuntu. You can run this script only on Ubuntu distributions».
1) Создаем файл с именем check-for-distribution.sh
:
nano check-for-distribution.sh
2) Используем следующий код:
#!/bin/bash
dist=`grep DISTRIB_ID /etc/*-release | awk -F '=' '{print $2}'`
if [ "$dist" == "Ubuntu" ]; then
echo "This is Ubuntu"
else
echo "Not Ubuntu. You can run this script only on Ubuntu distributions"
fi
3) Делаем файл исполняемым:
chmod +x check-for-distribution.sh
И запускаем:
./check-for-distribution.sh
Если скрипт будет запущен на системе Ubuntu, то будет выведено сообщение «This is Ubuntu».
При запуске на любом другом дистрибутиве будет выведено сообщение «Not Ubuntu. You can run this script only on Ubuntu distributions»:
Рассмотрим еще один практический пример. Создадим скрипт, который проверяет наличие файла с именем file1.txt
и, если такого файла нет, создает его. Проверка файла осуществляется в той директории, из которой запускается скрипт. Если файл уже присутствует, то будет выведено соответствующее сообщение и файл создан не будет.
1) Создаем файл с именем check-file.sh
:
nano check-file.sh
2) Используем следующий код скрипта:
#!/bin/bash
FILE="file1.txt"
if [ ! -f "$FILE" ]; then
touch "$FILE"
echo "$FILE has been created."
else
echo "$FILE already exists."
fi
3) Предоставляем права на выполнение для файла скрипта:
chmod +x check-file.sh
4) Запускаем скрипт:
./check-file.sh
Если же файл с именем file1.txt
уже присутствует в директории, из которой запускается скрипт, то будет выведено сообщение «file1.txt already exists.» и файл не будет создан:
В данной статье мы рассмотрели принцип работы логических операторов if-else
в командной оболочке Bash и привели практические примеры использования данных операторов, что может быть полезно при написании скриптов.