[Video] v20.28 Логический оператор ИЛИ (OR).


Сегодня я продолжу рассказ о логических операторах которые вы можете использовать в bash скриптах.
Речь пойдёт о операторе ИЛИ – OR.

Данный оператор возвращает положительный результат – true в случае, если хотя бы одно выражение было истинно.
Например, вы написали ответ на загадку или капчу на сайте большими буквами или маленькими, но правильно, то тогда вам даётся разрешение на вход или даётся ссылка на скачивание, если ввели неверно содержимое, не важно большими или маленькими буквами, то в доступе будет отказано.

Первый скрипт:
Здесь нужно ввести гласную букву английского алфавита, нужно ввести одну букву обычным шрифтом, не заглавной. Если ввели что-то отличающееся от гласной, то быдет выдано сообщение об этом, если ввели более одного символа, то об этом будет также сообщено.
:~/mytest.dir/v20.28$ cat v20.28.sh
clear
echo -e "Enter a lowercase character:\c"
read var
if [ `echo $var | wc -c` -eq 2 ]
then
if [ $var = a -o $var = e -o $var = i -o $var = o -o $var = u ]
then
echo "You entered a vowel."
else
echo "You didn't enter a vowel."
fi
else
echo "Invalid input."
fi

exit 0
В данном скрипте оператор ветвления if сначала проверяет сколько символов было введено. Это делается путём передачи содержимого введённого пользователем в утилиту wc, утилита wc подсчитывает количество символов. Если вы ввели один символ, то переменная будет содержать два символа – один введёный или один символ перевода строки, поэтому сравнение происходит с цифрой два, а не с 1.
Далее, если был введен один символ, то результат сравнения будет положительным и мы переходим к ветке then. В данной ветке есть ещё один оператор ветвления, который проверяет содержимое введённое пользователем путём сравнения с заранее введёными значениями – гласными буквами английского алфавита в данном случае. Переменная последовательно сравнивается с заранее заданными значениями и если хотя бы одно сравнение даст положительный результат, то всё сравнение будет положительным. Логический оператор ИЛИ обозначается как “-о”.
Если рузультат положительный, то нам об этом сообщается – мы ввели гласную букву, если нет, то об этом тоже сообщается.

Используя опетор ИЛИ можно улучшить мой скрипт Гороскоп, который я показывал в видео о операторе elif.
Теперь можно вводить не только месяца в виде чисел, но и словами.
В данном скрипте сравнение даёт положительный резутат не только в случае с совпадения месяца с каким либо числом, но и словом-названием месяца. (Подробнее смотрите в видео – тело скрипта в конце этого поста).
...
if [ $bmonth = 1 -o $bmonth = january ]
...

Использование логических операторов очень распространено. Для написания скриптов необходимо понимать их работу.
Попробуйте разобраться в логических операторах, написать какой-нибудь скрипт, тема достаточно простая.

На сегодня всё, спасибо за внимание, надеюсь вам понравилось.
Мне важен ваш отклик – пишите свои мысли в комментариях, подписывайтсь на канал, вступайте в мою группу в Вконтакте, ставьте большие пальцы вверх!

Удачи!
Sources:
youtube
opennet

Скрипт Гороскоп с оператором ИЛИ:
:~/mytest.dir/v20.28$ cat v20.28-horoscope.sh
clear
echo -e "Enter a month of your birth! \n(number 1-12 or word: january, february, march, april, may, june, july, august, september, october, november, december)\nmonth:\c"
read bmonth
echo -e "Enter a day of your birth! (number 1-31):\c"
read bday
echo
if [ $bmonth = 1 -o $bmonth = january ]
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 = 2 -o $bmonth = february ]
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 = 3 -o $bmonth = march ]
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 = 4 -o $bmonth = april ]
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 = 5 -o $bmonth = may ]
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 = 6 -o $bmonth = june ]
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 = 7 -o $bmonth = july ]
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 = 8 -o $bmonth = august ]
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 = 9 -o $bmonth = september ]
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 = 10 -o $bmonth = october ]
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 = 11 -o $bmonth = november ]
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 = 12 -o $bmonth = december ]
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