Linux и UNIX: программирование в shell. Руководство разработчика
вернуться

Тейнсли Дэвид

Шрифт:

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

  • Читать дальше
  • 1
  • ...
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win