Бесплатная миграция IT-инфраструктуры в облако

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

Александр Бархатов
Александр Бархатов
Технический писатель
28 октября 2024 г.
296
8 минут чтения
Средний рейтинг статьи: 5

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

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

Оператор if в Bash

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

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

  • Сначала программа проверяет условие (под условием можно понимать как команду, так и некое математическое выражение), которое содержится в операторе if;

  • Если условие истинно (возвращает True), то будут выполняться условия, которые перечислены после ключевого слова then;

  • Если условие ложно (возвращает False), то программа перейдет к выполнению следующих операторов, которые перечислены после оператора м.

Схема работы оператора if изображена на скриншоте ниже:

Image9

Синтаксис оператора 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

Image3

Вводим любое число, например, 32, и нажимаем на клавишу Enter:

Image2

Число 32 больше чем число 10, и так как данное условие вернуло истину (True), то была выведена команда echo.

Разберем скрипт немного подробнее:

  1. Условия записываются в квадратных скобках. В данном примере используются ключи -gt (greater than, «больше чем» — эквивалент знака >);

  2. Далее происходит проверка условия. Если условие истинно (True), то будет выполнена команда, указанная после ключевого слова then.

  3. Скрипт будет завершен, о чем говорит ключевое слово fi в конце.

Однако, данный скрипт обладает одним серьезным недостатком — отсутствует условие, при котором вводимое число будет меньше 10. Если ввести, например, 2, то скрипт ничего не вернет, так как не задано соответствующее условие:

Image11

Для решения данной проблемы используется оператор else, о котором мы поговорим в следующей главе.

Оператора if-else в Bash

В предыдущем разделе мы запускали скрипт, в котором было задано только одно условие в операторе if — истина (True), в то время как для условия ложь (False) ничего не было задано. Соответственно, если было введено значение, которое приводит ко лжи, то ответа нет. Если мы хотим, чтобы скрипт выполнял определенные действия при условии лжи (False), то необходимо использовать оператор else, который указывается после инструкции if.

Оператор if-else в Bash используется для выполнения условных операций. Он позволяет выполнять определенные команды в зависимости от того, истинно или ложно заданное условие. Синтаксис if-else следующий:

if [ условие ]; then
    # команды, выполняемые, если условие истинно
else
    # команды, выполняемые, если условие ложно
fi

Также стоит помнить, что ключевые слова, включая if, else, в сценариях оболочки Bash являются регистрозависимыми. Будьте внимательны при использовании ключевых слов в файлах скриптах.

Схема работы операторов if-else изображена ниже:

Image8

Рассмотрим использование операторов 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

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

  1. После ключевого слова if в квадратных скобках указывается условие. В данном примере используются ключи -gt, («больше чем», эквивалент знака >);

  2. Далее происходит проверка условия. Если условие истинно (True), то будет выполнена команда, указанная после ключевого слова then, — в данном случае будет выведено сообщение «Число больше 10». Если же условие ложно (False), то будет выполняться команда после ключевого слова else — в данном случае будет выведено сообщение «Число меньше или равно 10».

  3. Как только одно из условий будет выполнено, программа будет завершена, о чем говорит ключевое слово fi в конце.

Результат работы, если введенное число больше 10:

Image7

Результат работы, если введенное число меньше 10:

Image2

Применение if-else в Bash на практике

Рассмотрим применение оператора 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

Image5

Если скрипт будет запущен от имени обычного пользователя, то будет выведено сообщение «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

Image6

Если скрипт будет запущен на системе Ubuntu, то будет выведено сообщение «This is Ubuntu».

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

Image10

Рассмотрим еще один практический пример. Создадим скрипт, который проверяет наличие файла с именем 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

Image12

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

Image4

Заключение

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
28 октября 2024 г.
296
8 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев