Во многих языках программирования есть условные операторы, такие как if-else
. Эти операторы также присутствуют в Bash — оболочке по умолчанию, используемой почти во всех современных дистрибутивах Linux. Операторы if-else
используются для проверки условий — они позволяют выполнять определённые команды в зависимости от того, является ли условие истинным или ложным. Операторы if-else
работают точно так же, как и в любом другом языке программирования.
В этой статье мы на практических примерах рассмотрим, как использовать операторы if-else
в оболочке 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
— 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, который можно использовать при написании скриптов.
Сначала мы создадим скрипт, который проверяет, выполняется ли файл скрипта от имени пользователя 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
можно также использовать !=
.
Далее давайте создадим ещё один скрипт, который проверяет, какой дистрибутив 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».
Теперь давайте рассмотрим другой практический пример. Мы создадим сценарий 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, и привели практические примеры их использования. Эти примеры полезны при написании скриптов для автоматизации системных задач или проверок.