Понимание условных операторов Bash If Else и других условных операторов

Написание сценария оболочки Bourne Again Shell (Bash) может быть приятным опытом, особенно когда вы добавляете в него логику, обеспечивая его надежность. Один из способов внедрения этой логики, делая ваш сценарий умнее, – использование условных операторов, конкретно ‘bash if else’.

В этом глубоком погружении вы собираетесь осознать силу и тонкости операторов if-else и case в Bash. Это поможет вам создавать безошибочные, интеллектуальные сценарии Bash. Мы также добавим немного bewed practices, чтобы убедиться, что вы пишете сценарии, как профессионал.

Воодушевлены? Погружайтесь в это и повышайте свой уровень мастерства в написании сценариев Bash!

Подготовка к работе: Предварительные условия

Чтобы извлечь максимум из этого учебного пособия, вам понадобятся некоторые необходимые компоненты:

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

Почему стоит использовать условные операторы bash if else?

Почему условные операторы так почитаются в сценариях Bash? Просто говоря, они наделяют ваши сценарии способностью принимать решения на основе заранее определенных условий.

Например, вы можете использовать ‘bash if else’ для проверки существования файла перед его удалением. В качестве альтернативы, вы можете захотеть проверить, имеет ли пользователь необходимые разрешения перед предоставлением им доступа к ресурсу.

Пропитывание скриптов структурами ‘bash if else’ не только увеличивает их гибкость, но и их эффективность. Представьте себе скрипт, предназначенный для удаления всех файлов в папке. Используя ‘bash if else’, вы можете хирургически удалить только те файлы, возраст которых превышает 30 дней, сохраняя остальные.

Погружение в выражение ‘bash if else’

Теперь давайте оставим введение позади и примемся за дело. Мы начнем с одного из самых широко принимаемых условных выражений: выражение ‘bash if else’.

В самом сердце выражения ‘bash if else’ находится ворота для вставки условий в ваши сценарии Bash. Обратите внимание на его элегантный синтаксис ниже:

  • Он начинается с ключевого слова if, за которым следуют условия, заключенные в [[ ]]. После этого код, находящийся внутри выражения ‘bash if else’, выполняется, завершаясь ключевым словом fi.
  • Ключевое слово then отделяет условие от действий (или операторов), которые выполняются, когда условия удовлетворяются. Этот блок действий может охватывать несколько строк, разделенных точкой с запятой (;).
if [[ condition ]]; then
	statement
fi

Представьте себе создание системы входа в систему. Он запрашивает правильное имя пользователя перед предоставлением доступа:

1. Запустите ваш терминал и создайте новый файл bash_if_demo.sh с помощью вашего предпочтительного текстового редактора. Это будет наша площадка для понимания выражений ‘bash if else’.

nano bash_if_demo.sh

2. Вставьте приведенный ниже пример “bash if else” в ваш файл bash_if_demo.sh. После вставки сохраните изменения и закройте редактор.

Пример скрипта “bash if else” запрашивает имя пользователя. Если введено ожидаемое имя пользователя, отображается приветственное сообщение, дополненное текущей датой и временем.

Поддержание записей о дате и времени попыток доступа пользователей может быть ценным для последующего анализа.

Вводная строка #!/bin/bash (обычно известная как shebang) указывает системе, какой интерпретатор использовать для обработки последующего кода в скрипте. Здесь мы выбрали интерпретатор “bash”.

#!/bin/bash
# Выводит вопрос на экран.
echo "Whats your name?"
# Захватывает ввод с клавиатуры, сохраняя его в переменной $NAME
read NAME
# Запускает оператор 'bash if else' - проверяет, соответствует ли значение в $NAME 
# "ATA". Если есть совпадение, выполняется вложенный код. Иначе он пропускается.
if [ $NAME == "ATA" ]
then
  # Отображает сообщение только если значение в $NAME равно "ATA".
  echo "Welcome back ATA!"
fi
# Вне оператора 'bash if else' всегда отображается текущая дата и время.
date

3. Теперь давайте проверим наш сценарий ‘bash if else’. Выполните следующую команду:

bash bash_if_demo.sh

Помните, что независимо от используемого вами варианта оболочки Bash, добавьте префикс ‘bash’ перед именем вашего сценария. Это гарантирует, что система будет использовать Bash для выполнения сценария.

Введите “ATA” и нажмите Enter. Результат должен быть аналогичным следующему:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

Если вы вводите что-то кроме “ATA”, приветственное сообщение не будет отображаться в выводе. Будет показана только текущая дата и время. Это поведение обусловлено оператором ‘bash if else’, который проверяет точное соответствие значению переменной $NAME.

Обратите внимание, что операторы ‘bash if else’ чувствительны к регистру. Таким образом, “ata”, “aTa”, “Ata” и так далее отличаются от “ATA”.

Outcome on Entering a Non-matching Value

Регулярно тестируйте свои сценарии ‘bash if else’ с разными входными данными. Это гарантирует, что сценарии работают как ожидается.

Глубже: Вложенные операторы ‘bash if else’

Вы уже освоили основы создания операторов ‘bash if else’. Хотя эти базовые знания достаточны для простых задач, сложные сценарии часто требуют более сложных конструкций. Здесь на сцену выходят вложенные операторы ‘bash if else’. В основном это оператор ‘if’, содержащий один или несколько дополнительных операторов ‘if’.

Приведенная структура иллюстрирует основный синтаксис вложенных операторов ‘bash if else’. Здесь внешний if [[ условия ]] охватывает код, выполняемый только при выполнении условия. В нашем контексте вложенный код представляет собой еще один оператор ‘if’.

  • if [[ условия ]] – Это представляет собой внешнее условие ‘bash if else’. Вложенный код (еще одно условие ‘if’) выполняется только в том случае, если указанное условие истинно.
  • if [[ условие2 ]] – Это представляет внутреннюю ‘bash if else’ клозу. Здесь находится код, который выполняется только в том случае, если оба условия удовлетворены.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Давайте углубимся. Улучшим наш предыдущий пример ‘bash if else’, добавив здесь if-условие, которое спрашивает о пароле:

1. Во-первых, создайте новый файл с названием bash_nested_if_demo.sh с использованием вашего любимого текстового редактора.

nano bash_nested_if_demo.sh

2. Перенесите предоставленный ниже код ‘bash if else’ в файл bash_nested_if_demo.sh, сохраните изменения и закройте редактор.

Этот код ‘bash if else’ запрашивает как имя, так и пароль. Если условия для имени и пароля совпадают, отображается определенное сообщение. В противном случае выводится только текущая дата и время.

#!/bin/bash
# Выдает сообщение с запросом имени пользователя.
echo "Whats your name?"
# Собирает ввод пользователя.
read NAME
# Начинает оператор 'if else' для проверки, совпадает ли $NAME с "ATA".
if [ $NAME == "ATA" ]
 then
 # Предлагает следующий вопрос, на этот раз для пароля.
 echo "Password?"
 # Захватывает ввод пароля.
 read Password
   # Вложенный оператор 'if else' - Проверяет, соответствует ли $Password "pwd123".
   if [ "$Password" == "pwd123" ]; then
     # Отображает сообщение, если выполнены оба условия имени и пароля.
     echo "You've successfully logged in as ATA."
   fi
fi
# Подсвечивает текущую дату и время.
date

3. Теперь давайте посмотрим на этот сценарий ‘bash if else’ в действии. Выполните следующую команду:

bash bash_nested_if_demo.sh

Для оптимальных результатов введите ATA в качестве имени пользователя и pwd123 в качестве пароля.

Demonstrating the bash_nested_if_demo.sh Script in action

Если ваш ввод отличается от “ATA” или “pwd123”, вы получите только обратную связь о текущей дате и времени. Это потому, что структура ‘bash if else’ требует выполнения обоих условий.

Validating if entered conditions are met using ‘bash if else’

Расшифровка операторов ‘Bash If Else’

Операторы ‘if else’ являются основополагающими в сценариях Bash, обеспечивая решающие возможности для ваших сценариев. Однако важно понимать, что использование операторов ‘if’ не лишено недостатков.

Вызывающим вызовом является избыточная зависимость от ‘if’, что может запутать ваш код, делая его утомительным и сложным, особенно когда в игру вступают множественные вложенные операторы ‘if’. Такие сценарии рискуют стать “спагетти-кодом”, характеризующимся ухудшением читаемости и увеличением сложности.

Итак, как сделать ваш сценарий ‘bash if else’ более понятным? Оптимизируйте его с использованием операторов ‘if else’ вместо кучи вложенных ‘if’. Ключевое слово ‘else’ предлагает удобство указания фрагмента кода для выполнения, если условие ‘if’ не выполняется.

Для более ясной картины рассмотрим синтаксис ‘Bash If Else’ ниже, где:

  • if [[ conditions ]] – Здесь оператор ‘bash if else’ включает в себя код (statement1), который срабатывает только при соблюдении указанного условия.
  • else – Это часть структуры ‘bash if else’. Оператор else охватывает код (statement2), который выполняется, когда условие в предыдущем операторе if не удовлетворено.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Представьте, что вы создаете простую игру ‘bash if else’, где система ожидает случайного числа от пользователя:

1. Начните с создания нового файла с именем bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Внедрите последующий код ‘bash if else’ в ваш файл bash_if_else_demo.sh, сохраните изменения и выйдите из файла.

Основной код ‘bash if else’ запрашивает у пользователя его удачное число. Если ввод четный, выводится сообщение “Вы выиграли!”. В противном случае нечетное число вызывает вывод “Вы проиграли!”.

#!/bin/bash
# Транслирует запрос на угадывание счастливой цифры пользователя
echo -n "Input Your Lucky Number:"
# Принимает введенное число.
read var
# 'bash if else' условие для определения, является ли значение четным.
if [ $((var%2)) == 0 ]; then
 # Объявляет победу, если условие выполнено
 echo "You Won with 'bash if else'!"
else
 # Объявляет поражение, если условие не выполнено
 echo "You Lost using 'bash if else'!"
fi

3. Для просмотра работы сценария ‘bash if else’ выполните следующую команду:

bash bash_if_else_demo.sh

Введя четную цифру, вы должны увидеть сообщение “Вы выиграли с помощью ‘bash if else’!”. Напротив, ввод нечетной цифры должен привести к обратной связи “Вы проиграли, используя ‘bash if else’!”.

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

Чтобы улучшить сценарий ‘bash if else’, рассмотрите возможность включения сегмента, который определяет, вводит ли пользователь букву или отличный символ вместо числа.

Декодирование ‘Bash If Else’ и Конструкций Case

На данный момент вы исследовали несколько способов принятия решений в ваших сценариях Bash, а именно операторы ‘bash if else’. Но Bash предлагает еще один путь принятия решений – оператор case.

Аналогично ‘bash if else’, оператор case искусен в определении последовательностей кода для выполнения на основе определенных условий. Значительным преимуществом оператора case является его простота и ясность, особенно по сравнению с вложенными сценариями ‘bash if else’.

Чтобы полностью понять альтернативу `bash if else`, давайте погрузимся в синтаксис оператора case:

  • case $VAR in – Этот сегмент конструкции case оценивает переменную $VAR на соответствие определенным шаблонам до тех пор, пока не найдется совпадение.
  • pattern1) и pattern2) – Это критерии для тестирования, и как только обнаруживается совпадение, соответствующий код (statement1 или statement2) активируется.
  • esac – Завершает структуру case.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Представьте, что вы разрабатываете скрипт `bash if else`, где пользователи вводят названия своих стран, а в ответ скрипт показывает преобладающий язык этой страны.

1. Начните с создания файла с именем bash_case_demo.sh.

nano bash_case_demo.sh

2. Включите предоставленный ниже код `bash if else` в ваш файл bash_case_demo.sh, затем сохраните и выйдите.

Последующий скрипт `bash if else` запросит у пользователя название его страны и, исходя из шаблонов `case`, напечатает основной язык, на котором говорят в указанной стране.

3#!/bin/bash
# Запрашивает пользователя о его стране проживания
echo -n "In which country do you reside?"
# Захватывает ответ пользователя.
read var
# Определяет стандартный язык в выбранной пользователем стране ($var),
# полагаясь на шаблоны в рамках 'case' конструкции.
echo -n "The official language of $var is "

# Конструкция 'bash if else' case определяет, совпадает ли ввод пользователя ($var) с шаблонами.
case $var in
# Устанавливает шаблоны, раскрывающие основной язык выбранной пользователем страны.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English and French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Чтобы протестировать этот скрипт ‘bash if else’ на практике, используйте следующую команду:

bash bash_case_demo.sh

Вы увидите, что скрипт точно определяет язык в соответствии с выбранной страной пользователя.

Если указанная страна не соответствует заданным шаблонам, срабатывает стандартный (*) шаблон, в результате чего выводится “unknown”.

Illustrating the functionality of the bash_case_demo.sh Script

Завершение Условных выражений в Bash

В этом руководстве вы отправитесь в путешествие понимания ‘bash if else’ и других условных выражений в Bash. От простого выражения ‘if’ до сложных выражений ‘if-else’ и ‘case’, теперь у вас есть необходимые инструменты для эффективного написания сценариев Bash.

С этими основами ‘bash if else’ вы сможете более эффективно создавать сценарии Bash, сокращая возможные ошибки.

Но помните, что это лишь вершина айсберга. Bash предлагает огромное количество условных операторов. Возможно, стоит погрузиться в elif выражение и &&, операторы OR и || для более глубокого понимания. С посвящением, владение сценариями Bash вскоре станет достижимой целью!

Source:
https://adamtheautomator.com/bash-if-else/