EMPLOYEE SURNAME : $S_NAME
EMPLOYEE DEPARTMENT : $DEPART
MAYDAY
Вот как выглядит поток вывода при просмотре записи:
Enter the employee surname to view or all for all records:Wilson searching record… 8
EMPLOYEE NO | 89232 |
FIRST NAME | Peter |
SURNAME | Wilson |
DEPARTMENT | IT |
Do You Wish To Print This Record [Y..N] [N] :
Полный сценарий, позволяющий просматривать записи, имеет следующий вид:
$ pg dbaseview
#!/bin/sh
#dbaseview
#просмотр записей
#игнорирование сигналов trap "" 2 3 15
#временные файлы
HOLD1=HOLD1.$$
DBFILE=DBFILE
continue_promptYN ()
{
#continue_prompt
_STR=$1
_DEFAULT=$2
#проверим, что параметры верны
if [ $# -lt 1 ]; then
echo "continue_prompt: I need a string to display"
return 1
fi
while :
do
echo -n "$_STR [Y..N] [$_DEFAULT]:"
read _ANS
: $'{_ANS:=$_DEFAULT)
if [ "$_ANS"="" ]; then
case $_ANS in
Y) return 0 ;;
N) return 1 ;;
esac
fi
case $_ANS in
у|Y|Yes|YES)
return 0;;
n|N|No|NO)
return 1;;
*) echo "Answer either Y or N, default ls $_DEFAULT";;
esac
done
}
display_rec() {
#diaplay_rec
#можно применить команду cat <<.
tput cup 5 3
echo "EMPLOYEE NO: $CODE"
echo "FIRST NAME : $F_NAME"
echo "SURNAME : $S_NAME"
echo "DEPARTMENT : $DEPART"
echo -e "\n\n"
}
no_recs () {
# no_recs
echo -e "\n\nSorry could not find a record with the name $STR"
}
get_rec () {
# get_rec
clear
echo -n "Enter the employee surname to view or all for all records:"
read STR
if [ "$STR"="q" ] ; then
return 1 fi
if [ "$STR"="all" ]; then # просмотр всех записей
echo "Surname Name Employee Code" echo"____________________________________"
cat $DBFILE |awk -F: '{print $2"\t"$3"\t\t"$1}' | more
return 0
fi
REC=0
MATCH=no
if [ "$STR" != "" ]; then
while read CODE F_NAME S_NAME DEPART
do
REC=`expr $REC + 1`
tput cup 3 4
echo -n " searching record.. $REC" if [ "$S_NAME"="$STR" ]; then
# обнаружено имя
MATCH=yes
display_rec
break
else
continue
fi
done <$DBFILE
else
echo "Enter a surname to search for or q to quit"
fi
if [ "$MATCH"="no" ]; then
no_recs
fi
}
# главная программа
SAVEDIFS=$IFS
IFS=:
get_rec
if [ "$MATCH"="yes" ]; then
if continue_promptYN "Do You Wish To Print This Record" "N"; then
lpr << MAYDAY
RECORD No: $REC
EMPLOYEE NUMBER : $CODE
EMPLOYEE NAME : $F_NAME
EMPLOYEE SURNAME : $S_NAME
EMPLOYEE DEPARTMENT : $DEPART
MAYDAY
else
echo "No print of $S_NAME"
# не отображается fi # если желательно отображение
fi # если имеется совпадение
IFS=$SAVEDIFS
22.5. Заключение
Проверка достоверности данных, вводимых пользователем, играет важную роль. Однако для ее организации требуются некоторые дополнительные навыки. Вы имеете представление, какая вводимая информация помещается в запись, но в общем случае пользователи не располагают такими сведениями.
В среде программистов известно довольно старое изречение. Звучит оно примерно так: "Мусор на входе, мусор на выходе… кого это заботит, только б не было слишком поздно". Это означает, что если не проверять входные данные сценариев, в поток вывода может попасть ненужная информация.
Отладка сценариев