Если вводится корректный ID пользователя и пароль (паролем является mayday), переменные invalid_user и invalid_passwd для недействительного пользователя или пароля имеют значение "по". Затем производится тестирование, и если какая‑либо из переменных принимает значение yes, сценарий для этого пользователя завершается по умолчанию.
К работе допускаются пользователи с действительными ID и паролями. В регистрационном сценарии удобно применять описанное структурное дополнение. В данном примере действительными ID пользователя служат dave или pauline.
$ pg ifpass
#!/bin/sh
#ifpass
#установим значения переменных в "ложь" INVALID_USER=yes
INVALID_PASSWD=yes
# сохранение текущих установок команды stty
SAVEDSTTY=`stty -g`
echo "You are logging into a sensitive area"
echo -n "Enter your ID name :"
read NAME
# скройте символы, введенные в терминале
stty -echo
echo "Enter your password :"
read PASSWORD
# попробуем снова
stty $SAVEDSTTY
if [ "$NAME"="dave" ] || [ "$NAME"="pauline" ]; then
# если действительно, установите переменную
INVALID_USER=no
fi
if [ "$PASSWORD"="mayday" ]; then
# если пароль действителен, установите переменную
INVALID_PASSWD=no
fi
if [ "$INVALIDUSER"="yes" -o "$INVALID_PASSWD"="yes" ]; then
echo " `basename $0 :` Sorry wrong password or userid"
exit 1
fi
# если вы здесь, ваш ID и пароль в порядке.
echo "correct user id and password given"
Если при выполнении приведенного сценария указывается недействительный пароль, получим:
$ ifpass
You are logging into a sensitive area
Enter your ID name : dave
Enter your password :
ifpass :Sorry wrong password or userid
Введем верное имя регистрационное имя и пароль.
$ ifpass
You are logging into a sensitive area
Enter your ID name : dave
Enter your password :
correct user id and password given
Часть elif оператора if then else применяется для проверки при наличии более чем двух условий,
В следующем несложном примере протестируем введенные в сценарий имена пользователей.
Сначала в сценарии проверяется, действительно ли пользователь ввел имя; если имя не введено, то проверка не выполняется. Если имя введено, с помощью части elif проверяется, совпадает ли имя с root, louise или dave. В случае несовпадения имени ни с одним из перечисленных имен на экран выводится сообщение, что пользователь не является пользователем root, louise или dave.
$ pg ifelif
#!/bin/sh
# ifelif
echo -n "enter your login name :"
read NAME
# имя не введено, рассмотрение прекращается
if [ -z $NAME ] || [ "$NAME"="" ]; then
echo "You did not enter a name"
elif
# является ли именем root
[ "$NAME"="root" ]; then echo "Hello root"
elif
# именем является louise
[ $NAME="louise" ]; then echo "Hello louise"
elif
# именем является dave
[ "$NAME"="dave" ]; then echo "Hello dave"
else
# нет, это какое‑то другое имя
echo "You are not root or louise or dave but hi $NAME"
fi
При выполнении приведенного сценария с использованием различных регистрационных имен получим следующее:
$ ifelif
enter your login name : dave Hello dave
$ ifelif
enter your login name : You did not enter a name
$ ifelif2
enter your login name : peter
You are not root or louise or dave but hi peter
18.3.24. Проверка нескольких вариантов размещения файла