Шрифт:
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 is $_DEFAULT"
esac
done
}
display_rec
{
#display_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 :"
read STR
if [ "$STR"="q" ]; then
return 1
fi
REC=0
MATCH=no
if [ "$STR" != "" ]; then
while read CODE F_NAME S_NAME DEPART
do
REC=`expr $REC + 1`
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 DELETE This Record" "N"; then echo "DEL"
grep -v $STR DBFILE >$HOLD1 2> /dev/null if [ $?
– ne 0 ]; then
echo "Problems creating temp file $HOLD1..check it out" exit 1 fi
mv $HOLD1 DBFILE if [ $?
– ne 0 ]; then
echo "Problems moving temp file..check it out" exit 1 fi
# сортировка файла после изменений
sort +2 -t: $DBFILE >$HOLD2 2> /dev/null if [ $?
– ne 0 ]; then
echo "problems trying to sort the file..check it out"
exit 1 fi
mv $HOLD2. $DBFILE if [ $?
– ne 0 ]; then
echo "problems moving the temp sort file..check it out"
exit 1 fi else
echo "no deletion"
# удаление отсутствует
fi # если нужно удалить
fi # если совпадает
# восстановление установок IFS IFS=$SAVEDIFS
22.3. Обновление записей
При рассмотрении процесса удаления записи уже обсуждался код, приводящий к обновлению записи.
Когда обнаруживается корректная запись, все переменные поля записи с помощью переменной, выполняющей присваивание по умолчанию, назначаются переменной temp:
: [переменная, заданная по умолчанию:=переменная)
Пользователь может просто нажать клавишу [Return] для тех полей, значения которых изменять нежелательно. Затем переменная temp заменяется значением, заданным по умолчанию. Для выполнения произвольных обновлений можно просто вводить в соседние поля новые значения.
echo -n -e "EMPLOYEE NO: $C0DE\n"
echo -n "FIRST NAME : [$F_NAME] >"
read _F_NAME
: ${_FNAME:=$P_NAME}
Для реального обновления файла достаточно снова воспользоваться командой grep с опцией -v. Все записи обновляются по отдельности и перенаправляются во временный файл. Номер служащего задается в виде строки команды grep:
grep ~v $C0DE $DBFILE >$HOLD1
Пользователь получает запрос, нужно ли сохранять данную запись. Если ответ положителен, обновленная запись также добавляется во временный файл. Затем временный файл перемещается в исходный файл DEFILE.
echo "$CODE:$_F_NAME:$_S_NAME:$_DEPART" >> $HOLD1 mv $HOLD1 $DBFILE
После этого выполняется сортировка файла с помощью потока вывода, который сначала перенаправлялся во временный файл, затем перемещается обратно — в исходный файл DBFILE. Проверки кода завершения выполняются во время упомянутых действий с файлами, и пользователю выдаются сообщения об имеющихся затруднениях. Ниже показан поток вывода при обновлении записи.
Enter the employee surname :Penny
searching record.. 7