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