В этом руководстве вы узнаете, как использовать операторы if в Bash с несколькими условиями, чтобы улучшить свои навыки написания скриптов для оболочки. Вы научитесь эффективно комбинировать логические операторы, что позволит вам создавать скрипты, которые принимают разумные решения на основе различных критериев. По завершении этого практического занятия (Lab) вы сможете создавать универсальные автоматизированные инструменты для повседневных задач.
Твоя виртуальная машина уже ждёт.
Понимание основ операторов if в Bash
Начнем с основ. В Bash оператор if позволяет скрипту принимать решения о том, что делать, в зависимости от того, истинно ли или ложно заданное условие. Это особенно полезно, когда вам нужно автоматизировать задачи на вашей системе Ubuntu.
Откройте терминал в каталоге по умолчанию, /home/labex/project. Здесь вы будете писать все свои скрипты. Чтобы начать, создайте простой файл скрипта с именем basic_if.sh, введя следующую команду:
touch basic_if.sh
Добавьте следующий код для проверки существования файла:
#!/bin/bash
if [[ -f "testfile.txt" ]]; then
echo "The file exists."
else
echo "The file does not exist."
fi
Этот скрипт использует [[ -f "testfile.txt" ]] для проверки существования файла testfile.txt в текущем каталоге. Команда echo выведет сообщение в зависимости от результата проверки.
Чтобы запустить скрипт, сделайте его исполняемым:
chmod +x basic_if.sh
Затем выполните его:
./basic_if.sh
Поскольку файл testfile.txt еще не существует, вы увидите сообщение "The file does not exist." Создадим файл, чтобы увидеть другой результат:
touch testfile.txt
Запустите скрипт еще раз:
./basic_if.sh
Теперь он должен вывести "The file exists." Этот шаг знакомит вас с базовой структурой: if, then, else и fi. Двойные квадратные скобки [[ ]] - это современная особенность Bash, которая делает проверку условий более надежной, чем использование одинарных скобок.
Добавление нескольких условий с использованием оператора AND (&&)
Теперь давайте сделаем ваш оператор if более умным, проверив сразу несколько условий. Вы будете использовать оператор && (логическое И), который требует, чтобы все условия были истинными, чтобы блок then был выполнен.
Откройте снова файл basic_if.sh и замените его содержимое на следующий обновленный скрипт:
#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]]; then
echo "The file exists and is readable."
else
echo "The file is either missing or not readable."
fi
Этот скрипт проверяет два условия: существует ли файл testfile.txt (-f) и можно ли его прочитать (-r). Оба условия должны быть истинными, чтобы появилось первое сообщение.
Запустите скрипт:
./basic_if.sh
Поскольку вы создали файл testfile.txt на первом шаге и он по умолчанию доступен для чтения (так как он принадлежит пользователю labex), вы увидите сообщение "The file exists and is readable." Чтобы понять, как работает оператор &&, давайте проверим обратный сценарий. Измените права доступа к файлу, чтобы он стал недоступным для чтения:
chmod u-r testfile.txt
Запустите скрипт еще раз:
./basic_if.sh
Теперь он выводит сообщение "The file is either missing or not readable", так как второе условие (-r) не выполняется. Восстановите возможность чтения файла для следующих шагов:
chmod u+r testfile.txt
Оператор && гарантирует, что каждое условие должно быть выполнено — это идеально подходит для ситуаций, когда важны несколько критериев.
Интерактивное обучение без установки.
Использование оператора OR (||) для гибких условий
Далее вы познакомитесь с оператором || (логическое ИЛИ), который позволяет выполнить блок then, если хотя бы одно условие истинно. Это полезно, когда вам нужна гибкость в проверках.
Откройте снова файл basic_if.sh. Обновите его следующим кодом:
#!/bin/bash
if [[ -f "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
echo "At least one file exists."
else
echo "Neither file exists."
fi
Этот скрипт проверяет, существует ли либо файл testfile.txt, либо файл backup.txt. Поскольку файл testfile.txt уже находится в вашем каталоге, запустите скрипт:
./basic_if.sh
Вы увидите сообщение "At least one file exists." Теперь удалите файл testfile.txt, чтобы проверить логику оператора ||:
rm testfile.txt
Запустите скрипт еще раз:
./basic_if.sh
Он выводит сообщение "Neither file exists", так как ни один из файлов не существует. Создайте файл backup.txt, чтобы увидеть, как условие ИЛИ выполняется:
touch backup.txt
./basic_if.sh
Теперь снова выводится сообщение "At least one file exists". Оператор || очень полезен, когда достаточно, чтобы хотя бы одно условие было истинным.
Комбинирование операторов AND и OR
Давайте объединим операторы && и || для создания более сложной логики. Вы будете проверять, существует ли файл и соответствует ли он определенным критериям, с запасным условием.
Откройте снова файл basic_if.sh. Обновите его следующим кодом:
#!/bin/bash
if [[ -f "testfile.txt" ]] && [[ -r "testfile.txt" ]] || [[ -f "backup.txt" ]]; then
echo "Either testfile.txt is readable or backup.txt exists."
else
echo "No suitable file found."
fi
Этот скрипт проверяет, существует ли файл testfile.txtи доступен ли он для чтения, или существует ли файл backup.txt. Создайте файл testfile.txt снова:
touch testfile.txt
Запустите скрипт:
./basic_if.sh
Он выводит сообщение "Either testfile.txt is readable or backup.txt exists", так как файл testfile.txt удовлетворяет обоим условиям. Удалите файл testfile.txt и оставьте файл backup.txt:
rm testfile.txt
./basic_if.sh
Появляется то же самое сообщение, так как файл backup.txt удовлетворяет условию ||. Удалите также файл backup.txt:
rm backup.txt
./basic_if.sh
Теперь выводится сообщение "No suitable file found." Этот шаг показывает, как комбинировать операторы для принятия тонких решений.
Пиши код вместе с учебником.
Применение условий к практической задаче
Наконец, давайте используем то, что вы узнали, в реальной ситуации: валидации пользовательского ввода. Вы напишете скрипт для проверки, находится ли число в определенном диапазоне.
Создайте новый скрипт с именем number_check.sh:
touch number_check.sh
chmod +x number_check.sh
Добавьте следующий код:
#!/bin/bash
read -p "Enter a number between 1 and 10: " number
if [[ "$number" -ge 1 ]] && [[ "$number" -le 10 ]]; then
echo "Valid number: $number"
else
echo "Invalid number. Please enter a value between 1 and 10."
fi
Этот скрипт предлагает вам ввести число, а затем использует оператор &&, чтобы убедиться, что оно находится в диапазоне от 1 до 10 (включительно). Запустите его:
./number_check.sh
Введите 5 и нажмите Enter. Вы увидите сообщение "Valid number: 5". Запустите скрипт еще раз и введите 15. Он ответит "Invalid number. Please enter a value between 1 and 10." Это практический способ обработки пользовательского ввода, гарантирующий, что ваш скрипт будет работать только с корректными данными.
Резюме
В этом практическом занятии вы освоили использование операторов && и || для создания условных операторов if с несколькими условиями в языке Bash. От проверки свойств файлов до валидации пользовательского ввода, вы написали скрипты, которые принимают решения на основе сложных критериев. Эти навыки позволяют вам создавать надежные автоматизированные инструменты, адаптированные к различным потребностям на вашей системе Ubuntu.