ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Четверг, 20 февраля, 2025

Как использовать if-else в Bash

Как использовать if-else в Bash

Во многих языках программирования есть условные операторы, такие как if-else. Эти операторы также присутствуют в Bash — оболочке по умолчанию, используемой почти во всех современных дистрибутивах Linux. Операторы if-else используются для проверки условий — они позволяют выполнять определённые команды в зависимости от того, является ли условие истинным или ложным. Операторы if-else работают точно так же, как и в любом другом языке программирования.

В этой статье мы на практических примерах рассмотрим, как использовать операторы if-else в оболочке Bash.

 

Оператор if в Bash

Оператор if в Bash позволяет выполнять определённые команды в зависимости от значения истинности заданного условия. Для проверки истинности используются два логических оператора: True и False. Оператор if используется, когда нужно проверить условие. Он управляет ходом выполнения сценария, позволяя принимать решения на основе значений переменных, результатов выполнения команд и других условий.

Оператор if работает следующим образом:

  1. Сначала программа проверяет условие (условие может быть командой или математическим выражением), содержащееся в операторе if .
  2. Если условие выполняется, программа выполняет команды, перечисленные после ключевого слова then .
  3. Если условие не выполняется, программа выполняет команды, перечисленные после оператора else .

 

Синтаксис оператора if в Bash выглядит следующим образом:

if [condition]; then
  # команды, выполняемые при выполнении условия true
fi

 

Давайте разберём работу оператора if на простом практическом примере. Мы создадим скрипт, который запрашивает у пользователя число, и если введённое число больше 10, система вернёт сообщение «The number is greater than 10».

  1. Создайте новый файл с расширением .sh , например, с помощью редактора nano :
nano greater_than_10.sh
  1. Вставьте следующий код:
#!/bin/bash

read -p "Enter a number: " number

if [ $number -gt 10 ]; then
    echo "The number is greater than 10."
fi
  1. Предоставьте файлу разрешения на выполнение:
chmod +x greater_than_10.sh
  1. Теперь запустите скрипт:
./greater_than_10.sh

 

Выходной сигнал:

Enter a number:

 

Введите любое число, например 32, и нажмите Enter. Поскольку 32 больше 10 и это условие возвращает значение True, программа выполнит команду echo

Enter a number: 32
The number is greater than 10

 

Давайте разберем сценарий более подробно:

 

Однако у этого скрипта есть один существенный недостаток: он не обрабатывает случай, когда введённое число меньше 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.

  1. Создайте новый файл с расширением .sh:
nano check.sh
  1. Вставьте следующий код:
#!/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
  1. Предоставьте файлу разрешения на выполнение:
chmod +x check.sh
  1. Теперь запустите скрипт:
./check.sh

 

Алгоритм работы скрипта работает следующим образом:

 

Выведите, если число больше 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.

  1. Создайте файл с именем check-for-root.sh:
nano check-for-root.sh
  1. Используйте следующий код для проверки наличия пользователя root:
#!/bin/bash

if [[ $EUID -ne 0 ]]; then
  /usr/bin/printf "${R}>>>>${NC} Please run as root\n"
  exit 1
fi
  1. Предоставьте файлу разрешения на выполнение:
chmod +x check-for-root.sh
  1. И запустите его:
./check-for-root.sh

 

Если скрипт запускается от имени обычного пользователя, в консоли будет выведено сообщение «Please run as root».

Проверка для root пользователя использует условие $EUID -ne 0, где:

 

Пример сценария 2. Проверка дистрибутива Linux

Далее давайте создадим ещё один скрипт, который проверяет, какой дистрибутив 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
  1. Используйте следующий код:
#!/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
  1. Сделайте файл исполняемым:
chmod +x check-for-distribution.sh
  1. И запустите его:
./check-for-distribution.sh

 

Если скрипт запущен в системе Ubuntu, он выведет «This is Ubuntu». В любом другом дистрибутиве он выведет «Not Ubuntu. You can run this script only on Ubuntu distributions».

 

Пример скрипта 3. Проверка существования файла.

Теперь давайте рассмотрим другой практический пример. Мы создадим сценарий Bash, который проверяет, существует ли файл с именем file1.txt. Если его нет, сценарий создаст его. Сценарий проверяет наличие файла в том же каталоге, в котором он запущен. Если файл уже существует, сценарий выведет сообщение, не создавая файл.

  1. Создайте файл с именем check-file.sh:
nano check-file.sh
  1. Используйте следующий код скрипта:
#!/bin/bash

FILE="file1.txt"

if [ ! -f "$FILE" ]; then
    touch "$FILE"
    echo "$FILE has been created."
else
    echo "$FILE already exists."
fi
  1. Предоставьте разрешения на выполнение скрипта:
chmod +x check-file.sh
  1. Запустите скрипт:
./check-file.sh

 

Если файл file1.txt уже существует в каталоге, из которого запускается скрипт, вы увидите сообщение «file1.txt already exists». Файл не будет создан.

 

Заключение

В этой статье мы рассмотрели принципы логических операторов, таких как if-else в оболочке Bash, и привели практические примеры их использования. Эти примеры полезны при написании скриптов для автоматизации системных задач или проверок.

Exit mobile version