Шрифт:
Если пользователь вводит имя для переменной editor, происходит присвоение и экспорт этого имени.
18.3.19. Проверка кода завершения последней команды
До сих пор каталог создавался путем передачи названия каталога в сценарий. Затем сценарий запрашивал пользователя, создан ли каталог. В следующем примере создается каталог, и все файлы *.txt копируются из текущего каталога в новый каталог. В приведенном сценарии с помощью кода завершения последней команды проверяется успешность выполнения каждой из команд. Если результаты выполнения команд неудовлетворительны, пользователю направляется соответствующее сообщение.
$ pg ifmkd±r2
#!/bin/sh
#ifmkdir2
DIR_NAME=testdirec
#где мы находимся?
THERE=`pwd`
# перенаправление потока вывода в системную корзину
mkdir $DIR_NAME > /dev/null 2>&1
# каталог ли это ?
if [ -d $DIR_NAME ] ; then
# можно ли применить к каталогу команду cd
cd $DIR_NAME
if [ S? = 0 ]; then
# да, можно
HERE=`pwd`
cp $THERE/*.txt $HERE
else
echo "Cannot cd to $DIR_NAME" >&2
exit 1
fi
else
echo "cannot create directory $DIR_NAME" >&2
exit 1
fi
18.3.20. Добавление и проверка целых значений
В следующем примере рассматривается проверка чисел. Сценарий содержит набор значений счетчика, который легко изменяется при вводе пользователем нового числа. Затем сценарий добавляет это новое значение к постоянному значению, равному 100. Ниже показано, как выполняется подобный сценарий.
Пользователь может изменить значение путем ввода нового значения, или же ничего не менять, нажав клавишу [Return]. Затем текущее значение выводится на экран, и сценарий завершается.
Если пользователь вводит у или у, поступает приглашение на ввод нового значения, которое добавляется к счетчику. Если пользователь нажимает клавишу [Return], сценарий с помощью команды echo сообщает, что счетчик сохраняет старое значение. Когда пользователь вводит значение, проверка чисел позволяет уточнить, является ли это значение числом. Если это так, значение добавляется к значению counter и затем отображается на экране.
$ pg ifcounter
#!/bin/sh
# ifcounter
COUNTER=100
echo "Do you wish to change the counter value currently set at $COUNTER ? [y...n] :"
read ANS
if [ "$ANS"="y" ] || [ "$ANS"="Y" ]; then
# да, пользователь желает изменить значение
echo "Enter a sensible value "
read VALUE
#простой тест для уточнения, является ли значение численным,
#добавим к VALUE любое число, проверим код возврата
expr $VALUE + 10 > /dev/null 2>&1
STATUS=$?
# проверим код возврата для expr
if [ "$VALUE"="" ] || [ "$STATUS" != "0" ]; then
# направим ошибки в стандартный поток ошибок
echo " You either entered nothing or a non-numeric " >&2
echo " Sorry now exiting..counter stays at. $COUNTER" >&2 exit 1 fi
# если мы здесь, значит, это — число, добавим его к COUNTER
COUNTER=`expr $COUNTER + $VALUE`
echo " Counter now set to $COUNTER" else
#если мы здесь, значит, пользователь вместо того, чтобы ввести число,
#нажал клавишу ввода
#или ответим n для изменения значения приглашения
echo " Counter stays at $COUNTER"
fi
Рассмотрим результаты выполнения приведенного сценария.
$ ifcount
Do you wish to change the counter value currently set at 100? [y..n]:n Counter stays at 100
$ ifcount
Do you wish to change the counter value currently set at 100? [y..n]:y
Enter a sensible value: fdg
You either entered nothing or a non-numeric
Sorry now exiting..counter stays at 100
$ ifcount
Do you wish to change the counter value currently set at 100? [y..n]:y Enter a sensible value: 250
Counter now set to 350
18.3.21. Простой сценарий, обеспечивающий безопасность при регистрации
А теперь рассмотрим структурное дополнение, которое усиливает меры безопасности при регистрации пользователя перед запуском приложений. Поступает приглашение на ввод имени пользователя и пароля; если имя пользователя и пароль