[Video] v20.25 Оператор ветвления elif.

Сегодня я хочу рассказать о конструкции elif. Конструкцию elif можно применять в операторах ветвления if-then-else в случае если у вас более двух вариантов развития событий. Например, вас просят ввести дату вашего рождения и в зависимости от дня и месяца вам говорится кто вы по гороскопу – Дева, Скорпион или тд…

Я решил сделать небольшую игру – речной бой (конечно это очень упрощённая игра, но для нашего пример подойдёт).
Пусть у нас будет река длинной в 10 клеток. На реке будет корабль длинной в 3 клетки. Клетки нумеруются с 1 по 10 включительно.
Цель – попасть в корабль – о результате сообщит наш скрипт.
О том как работает скрипт смотрите в видео, вот сам скрипт:
:~/mytest.dir/v20.25$ cat v20.25.sh
a=3
b=5
clear
echo -e "\nThis is the RiverFight: \n10-[ ]\n09-[ ]\n08-[ ]\n07-[ ]\n06-[ ]\n05-[ ]\n04-[ ]\n03-[ ]\n02-[ ]\n01-[ ]\n"
echo "Enter a number between 1 and 10:"
read num
if [ $num -lt $a ]
then
echo "It was too low! Try again!"
elif [ $num -gt $b ]
then
echo "It was too high! Try again!"
else
echo -e "\nNice shot! You win!"
echo -e "\n10-[ ]\n09-[ ]\n08-[ ]\n07-[ ]\n06-[ ]\n05-[x]\n04-[x]\n03-[x]\n02-[ ]\n01-[ ]\n"
fi

exit 0

Основная часть скрипта – пользователя просят ввести число от 1 до 10.
Используя read считывается значение задаваемое пользователем.
После чего происходит сравнение введёного значения с переменными a и b – переменные показывают где расположен корабль на поле и занаются в начале скрипта. Всё что от a до b – корабль и если человек ввёл значение превышающее b или меньше a, то он промазал.
Конструкция elif позволяет добавить ещё одну проверку в конструкцию с оператором ветвления if-then-else.
После проверки первоначального условия – if – производится какое-то действие (если условие положительное).
Далее должна наступить очередь оператора else, но можно добавить ещё одну проверку используя elif – всё тоже самое, как будто ещё один if.
Последнее условие оставляем как и раньше используя оператор else.

Таким образом – используя конструкцию if-then-else и оператор elif вы можете проверять множество условий в вашем скрипте.
Ещё один пример в котором используется много вложенных операторов ветвления – скрипт Гороскоп – проверка того кто вы по гороскопу.
(Работа скрипта показана в видео).
Сам скрипт довольно большой, он состоит из множества повторяющихся операторов ветвления и структура его проста.

Скрипт Гороскоп:
:~/mytest.dir/v20.25$ cat v20.25-horoscope.sh
clear
echo "Enter a month of your birth! (number 1-12)"
read bmonth
echo "Enter a day of your birth! (number 1-31)"
read bday
echo

if [ $bmonth -eq 1 ]
then
if [ $bday -lt 20 ]
then
echo -e "You are Kozerog - Capricornus! (22.12 - 19.01)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 31 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Vodoley - Aquarius! (20.01 - 18.02)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 2 ]
then
if [ $bday -lt 19 ]
then
echo -e "You are Vodoley - Aquarius! (20.01 - 18.02)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 29 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Ribi - Pisces! (19.02 - 20.03)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 3 ]
then
if [ $bday -lt 21 ]
then
echo -e "You are Ribi - Pisces! (19.02 - 20.03)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 31 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Oven - Aries! (21.03 - 19.04)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 4 ]
then
if [ $bday -lt 20 ]
then
echo -e "You are Oven - Aries! (21.03 - 19.04)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 30 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Telec - Taurus! (20.04 - 20.05)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 5 ]
then
if [ $bday -lt 21 ]
then
echo -e "You are Telec - Taurus! (20.04 - 20.05)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 31 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Bliznici - Gemini! (21.05 - 20.06)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 6 ]
then
if [ $bday -lt 21 ]
then
echo -e "You are Bliznici - Gemini! (21.05 - 20.06)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 30 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Rak - Cancer! (21.06 - 22.07)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 7 ]
then
if [ $bday -lt 23 ]
then
echo -e "You are Rak - Cancer! (21.06 - 22.07)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 31 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Lev - Leo! (23.07 - 22.08)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 8 ]
then
if [ $bday -lt 23 ]
then
echo -e "You are Lev - Leo! (23.07 - 22.08)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 31 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Deva - Virgo! (23.08 - 22.09)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 9 ]
then
if [ $bday -lt 23 ]
then
echo -e "You are Deva - Virgo! (23.08 - 22.09)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 30 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Veci - Libra! (23.09 - 22.10)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 10 ]
then
if [ $bday -lt 23 ]
then
echo -e "You are Veci - Libra! (23.09 - 22.10)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 31 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Scorpion - Scorpio! (23.10 - 21.11)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 11 ]
then
if [ $bday -lt 22 ]
then
echo -e "You are Scorpion - Scorpio! (23.10 - 21.11)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 30 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Strelec - Sagittarius! (22.11 - 21.12)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

elif [ $bmonth -eq 12 ]
then
if [ $bday -lt 22 ]
then
echo -e "You are Strelec - Sagittarius! (22.11 - 21.12)\nYou entered: month=$bmonth, day=$bday.\n"
elif [ $bday -gt 31 ]
then
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
else
echo -e "You are Kozerog - Capricornus! (22.12 - 19.01)\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

else
echo -e "\nYou entered wrong numbers!\nYou entered: month=$bmonth, day=$bday.\n"
fi
exit 0

Подробнее смотрите в моём видео.
На сегодня всё, спасибо за внимание, надеюсь вам понравилось. =)
Подписывайтесь на канал!

Удачи!

Sources:
youtube
opennet