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
EMPLOYEE NO: 98211
FIRST NAME : Simon
SURNAME : Penny
DEPARTMENT : Services
ls this the record you wish to amend [Y..N] [Y]:
amending
EMPLOYEE NO: 98211
FIRST NAME : [Simon] >
SURNAME : [Penny] >
DEPARTMENT : [Services] >Accounts Ready to save this record [Y..N] [Y] :
Полный сценарий, выполняющий обновление записей:
$ pg dbasechange
#!/bin/sh
# dbasechange
• обновление записи
• игнорирование сигналов trap "" 2 3 15
• временные файлы DBFILE=DBFILE HOLD1=HOLD1.$$ HOLD2=HOLD2.$$
continue_promptYN()
{
• continue_jprompt _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|Y|Yes|YES)
return 0;;
n|N|No|NO) return 1;;
*) echo "Answer either Y or N, default is $_DEFAULT";;
esac
done }
display_rec() {