Оператор if
Часть раздела Основы путешествия по Terminal на Coddy — урок 70 из 82.
Пока что ваши скрипты выполняют каждую команду сверху вниз без какого-либо принятия решений. Но что, если вы хотите, чтобы ваш скрипт выполнял разные действия в зависимости от определённых условий? Вот здесь и вступает в силу оператор if.
Оператор if позволяет вашему скрипту принимать решения. Он проверяет, истинно ли условие, и если да, выполняет блок кода. Вот базовая структура:
#!/bin/bash
age=18
if [ $age -ge 18 ]; then
echo "You are an adult"
fiУсловие помещается внутри квадратных скобок с пробелами по краям. Ключевое слово then обозначает начало кода для выполнения, а fi (if, написанное задом наперёд) завершает конструкцию.
Вы также можете обработать случай, когда условие ложно, используя else:
#!/bin/bash
age=15
if [ $age -ge 18 ]; then
echo "You are an adult"
else
echo "You are a minor"
fiОбщие операторы сравнения для чисел включают -eq (равно), -ne (не равно), -gt (больше), -lt (меньше), -ge (больше или равно) и -le (меньше или равно). Для строк используйте = для равенства и != для неравенства.
Помните, всегда включайте пробелы внутри скобок и заключайте переменные в кавычки, чтобы избежать ошибок с пустыми значениями.
Задание
ЛегкоСоздайте shell-скрипт с именем check_score.sh, который использует условный оператор if для оценки балла теста.
Ваш скрипт должен:
- Начинаться со строки shebang (
#!/bin/bash) - Создать переменную с именем
scoreсо значением75 - Использовать условный оператор if для проверки, является ли балл большим или равным 70
- Если истинно, вывести:
You passed! - Если ложно, вывести:
You failed.
Сделайте скрипт исполняемым и запустите его. Поскольку балл равен 75, ваш вывод должен быть:
You passed!Подсказка: Не забудьте использовать
-geдля сравнения «больше или равно», включить пробелы внутри квадратных скобок и завершить свой условный операторfi.
Шпаргалка
Оператор if позволяет скриптам принимать решения на основе условий:
#!/bin/bash
age=18
if [ $age -ge 18 ]; then
echo "You are an adult"
fiУсловие помещается внутри квадратных скобок с пробелами по бокам. Используйте then для обозначения начала блока кода и fi для завершения оператора.
Используйте else для обработки случаев, когда условие ложно:
#!/bin/bash
age=15
if [ $age -ge 18 ]; then
echo "You are an adult"
else
echo "You are a minor"
fiОбщие операторы сравнения:
- Числа:
-eq(равно),-ne(не равно),-gt(больше),-lt(меньше),-ge(больше или равно),-le(меньше или равно) - Строки:
=(равенство),!=(неравенство)
Всегда включайте пробелы внутри скобок и заключайте переменные в кавычки, чтобы избежать ошибок с пустыми значениями.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Каталоги
Создать каталогСкопировать каталогПереместить и переименовать каталогУдалить каталогИтог - Операции с каталогами7Содержимое файлов
Head и TailПодсчёт словКоманда sortКоманда uniqОсновы grepGrep с флагамиПовторение - Текстовый детектив10Проект анализатора логов
Обзор проектаПросмотр файла лога13Основы скриптинга оболочки
Что такое скрипт оболочкиСоздание и запуск скриптаПеременные в скриптахПользовательский ввод в скриптахОператор ifЦикл forЦикл whileИтог - Угадай число2Навигация
Вывод текущей рабочей директорииСписок файловСмена директорииАбсолютные и относительные путиДомашняя и корневая директорииИтог - Найди свой путь8Перенаправление
Стандартный выводПерезапись в файлДописывание в файлСтандартный вводСтандартная ошибкаПовторение - Сборщик логов11Права доступа
Понимание прав доступаЧтение прав доступаChmod с числамиChmod с символамиВладение файламиПовторение - Заблокируйте доступ14Проект скрипта резервного копирования
Обзор проектаПолучение пути к источнику3Файлы
Создать файлПрочитать файлСкопировать файлПереместить и переименовать файлУдалить файлПовторение - Операции с файлами6Символы подстановки и шаблоны
Звёздный символ подстановкиВопросительный символ подстановкиСкобочные символы подстановкиКомбинирование символов подстановкиПовторение - выборочные операции9Каналы
Что такое каналЦепочка двух командЦепочка нескольких командКанал с grepИтог - Конвейер данных