Если пользователь выбирает 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

Перейти на страницу:

Похожие книги