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


Сегодня я хочу начать рассказ о логических операторах которые вы можете использовать в bash скриптах.
Логические операторы можно использовать в случаях когда какое-либо действие может быть выполнено в случае соответствия нескольких условий заданным. Например, если логин и пароль совпадают с заданными, то тогда разрешить доступ, если хотябы один элемен не совпадает, то в доступе отказать.
Начну с логического оператора – И (AND). данный логический оператор возвращает true-истину или положительный ответ, если оба выражения-условия истинны. Я говорю оба так как это необходимый минимум, но можно проверять на соответствие большее количество выражений или условий.

Вот мой скрипт:
:~/mytest.dir/v20.27$ cat v20.27_and.sh
echo -e "Enter a number between 50 and 100:\c"
read num
if [ $num -le 100 -a $num -ge 50 ]
then
echo "You are within limits!"
else
echo "You are out of limits!"
fi

Здесь есть оператор ветвления if – как мы знаем он переходит к ветке then в случае если условие в квадратных скобках верно – true.
В данном случае для того чтобы условие было верно необходимо чтобы оба сравнения были верны – логический оператор AND обозначается “-a“.
Введёное пользователем значение должно быть меньше или равно 100 _И_ больше или равно 50 – тогда условие будет верно и мы сможем перейти к ветке then. Если условие отрицательно, но переходим к ветке else.

Логические операторы помогают существенно упростить скрипт, данную логику можно описать используя операторы ветвления, но скрипт становится очень громоздким.
Давайте сравним два скрипта – скрипт safe из прошлого видео о сравнении строковых переменных и тот же скрипт переписанный с использованием логического оператора _И_.

Старый скрипт:
:~/mytest.dir/v20.27$ cat ~/mytest.dir/v20.26/v20.26.sh-safe
#here login and password combination:
#
login="alex"
password="123"

clear

echo -e "\nEnter your login:"
read ulogin
echo -e "\nEnter your password:"
read upassword

if [ "$login" = "$ulogin" ]
then
if [ "$password" = "$upassword" ]
then
echo -e "\nlogin/password matched. Here is a secret data:\n\nBlah-blah-blah-blah.\nBlah-blah-blah-blah.\nBlah-blah-blah-blah.\n"
else
echo -e "\nlogin/password doesn't match."
fi

else
echo -e "\nlogin/password doesn't match."
fi

exit 0

Новый скрипт:
:~/mytest.dir/v20.27$ cat v20.27_safe-v2.sh
#here login and password combination:
#
login="alex"
password="123"

clear

echo -e "\nEnter your login:\c"
read ulogin
echo -e "\nEnter your password:\c"
read upassword

if [ "$login" = "$ulogin" -a "$password" = "$upassword" ]
then
echo -e "\nlogin/password matched. Here is a secret data:\n\nBlah-blah-blah-blah.\nBlah-blah-blah-blah.\nBlah-blah-blah-blah.\n"
else
echo -e "\nlogin/password doesn't match."
fi

exit 0

Как видно скрипт избавился от лишнего ветвления и стал проще для чтения. Утилита wc показывает, что новый скрипт короче на 6 строк.
:~/mytest.dir/v20.27$ wc -l v20.27_safe-v2.sh
22 v20.27_safe-v2.sh

:~/mytest.dir/v20.27$ wc -l ~/mytest.dir/v20.26/v20.26.sh-safe
28 /home/alex/mytest.dir/v20.26/v20.26.sh-safe

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

Удачи!

Sources:
youtube
opennet