Если пользователь выбирает N, производится просмотр блоков кода в конструкции if и выполнение сценария завершается. При вводе пользователем большого числа записей следует применить функцию, которая добавляет записи в теле цикла while. Тогда после добавления записи возврат в меню не происходит, а выполнение сценария не завершается.
Если пользователь выбирает Y, запись сохраняется. Для добавления записи в файл применяется следующий код:
echo "$NUM:$F_NAME:$S_NAME:$DEPART" >> $DBFILE
Пользователь получает сообщение о том, что запись сохраняется в файле; при этом команда sleep приостанавливает выполнение сценария на одну секунду. Именно за это время пользователь сможет просмотреть сообщение.
Разделителем поля служит двоеточие. Затем файл сортируется по полю, содержащему фамилию, а поток вывода направляется в файл temp. После этого файл перемещается назад, в исходный файл DEFILE. Во время перемещений файла выполняется проверка кода завершения. При появлении каких‑либо затруднений пользователь получает соответствующее сообщение.
Вот как выглядит поток данных вывода в случае добавления записи:
ADD A RECORD
Employee Staff Number : 23233
Employee's First Name : Peter
Employee's Surname : Wills
Company Department : Accounts
Do You wish To Save This Record [Y..N] [Y]:
saved
А теперь обратите внимание, какой вид имеет файл DBFILE после добавления нескольких записей:
$ pg DBFILE
32123:Liam:Croad:Claims 2399:Piers:Cross:Accounts 239192:John:Long:Accounts 98211:Simon:Penny:Services 99202:Julie:Sittle:XT 23736:Peter:Wills:Accounts 89232:Louise:Wilson:Accounts 9l811:Andy:Wools:IT
Ниже приодится полный сценарий, выполняющий добавление записи:
$ pg dbase_add
#!/bin/sh
#dbase_add
#добавление записи
#игнорирование сигналов
trap "" 2 3 15
#файл temp содержит файлы
DBFILE=DBFILE
HOLD1=HOLD1.$$
read_a_char ()
#read_a_char
#сохранение установок
SAVEDSTTY=`stty -g`
stty cbreak
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -cbreak
stty $SAVEDSTTY
}
continue_promptYN()
#вызов: continue_prompt "string to display" default_answer
{
# 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|Y|Yes|YES)
return 0 ;;
n|N|No|NO)
return 1 ;;
*) echo "Answer either Y or N, default ls $_DEFAULT" ;;
esac
echo $_ANS
done
)
continue_prompt() {
# continue_prompt
echo -n "Hit any key to continue.."
DUMMY=`read_a_char`
}
length_check ()
# length_check
# $1=строка для проверки длины $2=максимальная длина
_STR=$1
_МАХ=$2
_LENGTH=`echo $_STR | awk '{print length ($0)}`
if [ "$_LENGTH" -gt "$_MAX" ]; then
return 1 else
return 0 fi
}
a_number()
(
#a_number
#вызов: a_number $1=number _NUM=$1
_NUM=`echo $1|awk '{if($0~/[^0-9]/) print "1"}'`
if [ "$_NUM" != "" ]
then
# ошибки
return 1
else
return 0
fi
}
characters()
#characters
#вызов: char_name string {
_LETTERS_ONLY=$1