18.3.20. Добавление и проверка целых значений
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