Unix / Linux - Shell Decision Making

Привет, стремящиеся к программированию! Сегодня мы окунемся в захватывающий мир принятия решений в скриптовании Unix и Linux shell. Как ваш доброжелательный соседский компьютерный учитель, я здесь, чтобы провести вас через это путешествие шаг за шагом. Так что возьмите любимый напиток, устройтесь поудобнее и отправляйтесь в это приключение вместе со мной!

Unix / Linux - Decision Making

Операторы if...else

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

Основной оператор if

Давайте начнем с simplest вида оператора if:

if [ условие ]
then
команда1
команда2
...
командаN
fi

Вот пример из реального мира:

#!/bin/bash
age=18

if [ $age -ge 18 ]
then
echo "You are old enough to vote!"
fi

В этом примере мы проверяем, равна ли переменная age 18 или больше. Если да, то выводится сообщение "You are old enough to vote!".

Оператор if...else

А что, если мы хотим сделать что-то, когда условие ложно? Вот где появляется claузula else:

if [ условие ]
then
команда1
команда2
...
командаN
else
альтернативная_команда1
альтернативная_команда2
...
альтернативная_командаN
fi

Давайте изменим наш пример с голосованием:

#!/bin/bash
age=16

if [ $age -ge 18 ]
then
echo "You are old enough to vote!"
else
echo "Sorry, you're too young to vote."
fi

Теперь, если возраст меньше 18, будет выведено сообщение "Sorry, you're too young to vote."

Оператор if...elif...else

Иногда жизнь (и код) не так проста, как черное и белое. Часто нам нужно проверить несколько условий. Вот где появляется claузula elif (иначе если):

if [ условие1 ]
then
команда1
elif [ условие2 ]
then
команда2
else
альтернативная_команда
fi

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

#!/bin/bash
grade=75

if [ $grade -ge 90 ]
then
echo "A - Excellent!"
elif [ $grade -ge 80 ]
then
echo "B - Good job!"
elif [ $grade -ge 70 ]
then
echo "C - You passed."
else
echo "F - You need to study more."
fi

Этот скрипт оценивает оценку студента и предоставляет соответствующий отзыв в зависимости от различных диапазонов оценок.

Оператор case...esac

Теперь представьте, что вы наbuffet с множеством غذاء опций. Это как оператор case...esac в программировании. Он позволяет сравнивать значение с списком шаблонов и выполнять команды в зависимости от совпадения.

Основная синтаксис выглядит так:

case выражение in
шаблон1)
команда1
команда2
...
командаN
;;
шаблон2)
команда1
команда2
...
командаN
;;
*)
командная_по_умолчанию
;;
esac

Давайте рассмотрим практический пример:

#!/bin/bash
fruit="apple"

case $fruit in
"apple")
echo "It's a delicious red fruit!"
;;
"banana")
echo "It's a yellow curved fruit!"
;;
"orange")
echo "It's a juicy citrus fruit!"
;;
*)
echo "I don't know that fruit."
;;
esac

В этом примере мы сравниваем значение fruit с различными шаблонами. Если оно совпадает с "apple", будет выведено соответствующее сообщение. Если оно не совпадает ни с одним из указанных шаблонов, будет выполнена команда по умолчанию (*).

Множественные шаблоны

Вы также можете сравнивать несколько шаблонов для одного и того же набора команд:

#!/bin/bash
day=$(date +%A)

case $day in
Monday|Tuesday|Wednesday|Thursday|Friday)
echo "It's a weekday. Time to work!"
;;
Saturday|Sunday)
echo "It's the weekend. Time to relax!"
;;
*)
echo "What planet are you on?"
;;
esac

Этот скрипт проверяет текущий день недели и выводит, является ли это будним днем или выходным.

Сравнение if...else и case...esac

Теперь сравним эти два структуры принятия решений:

Feature if...else case...esac
Сложность Может обрабатывать сложные условия Лучше для простого соответствия значениям
Читаемость Может стать трудным для чтения с множеством условий Больше читается с множеством условий
Производительность Сlightly медленнее для множества условий Быстрее для множества условий
Гибкость Может использовать любой тип условия Ограничено до соответствия шаблонам

За годы преподавания я заметил, что студенты часто struggle с выбором между if...else и case...esac. Вот простое правило: если вы проверяете одну переменную против множества возможных значений, case...esac - ваш друг. Для всего остального используйте if...else.

Запомните, программирование как готовка. Эти структуры принятия решений - это ваши ingredience, и с практикой вы научитесь, когда использовать每一种 для создания perfect блюда... я имею в виду, скрипта!

В заключение, принятие решений является важным аспектом скриптования shell. Оно позволяет вашим скриптам адаптироваться и реагировать на различные ситуации, делая их более мощными и гибкими. Независимо от того, используете ли вы if...else или case...esac, вы теперь equipped с инструментами для принятия решений. Продолжайте практиковаться, и вскоре вы будете писать скрипты, которые могут принимать решения быстрее, чем вы можете сказать "sudo"!

Credits: Image by storyset