Выбрать главу

Ниже приодится полный сценарий, выполняющий добавление записи:

$ 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

_LETTERS_ONLY=`echo $1 | awk '{if ($0~/[^a‑zA‑Z]/) print "1")'`

if [ "$_LETTERS_ONLY" != "" ]

then

# ошибки

return 1

else

# содержит только символы

return 0

fi

}

check_duplicate() {

#check_duplicate

#проверка дублирования номера служащего

#для вызова: check_duplicate строка _CODE=$1

MATCH=`grep "$_CODE\>" $DBFILE`

echo $_CODE

if [ "$MATCH"="" ]; then

return 0 # нет дубликата

else

return 1 # дубликат обнаружен

fi

}

add_rec()

{

# add_rec

# == STAFF NUMBER

while :

do

echo -n "Employee Staff Number :"

read NUM

if [ "$NUM" != "" ]; then

if a_number $NUM; then

NUM_PASS=0

else

NUM_PASS=1

fi

if length_check $NUM 10; then

LEN_PASS=0

else

LEN_PASS=1

fi

# проверка наличия дубликатов… if check_duplicate $NUM; then

DUPLICATED=0

else

DUPLICATE=1

echo "Staff Number: There ls already a employee with this number" continue_prompt

fi

if [ "$LEN_PASS"="0" -a "$NUM_PASS"="0" -a "$DUPLICATE"="0" ] then

break

else

echo "Staff Number: Non‑Numeric or Too Many Numbers In Field" continue_prompt

fi

else

echo "Staff Number: No Input Detected, This Field Requires a Number" continue_prompt fi done

# == Имя

while :

do

echo -n "Employee's First Name:"

read F_NAME

if [ "$F_NAME" != "" ]; then

if characters $F_NAME; then

F_NAME_PASS=0

else

F_NAME_PASS=1

fi

if length_check $F_NAME 20; then

LEN_PASS=0

else

LEN_PASS=1

fi

# oбa условия должны быть истинными для выхода из этого цикла if [ "$LEN_PASS"="0" -a "$F_NAME_PASS"="0" ]; then

break

else

echo "Staff First Name: Non‑Character or Too Many Characters In Field" continue_prompt

fi

else

echo "Staff First Name: No Input Detected, This Field Requires Characters"

continue_prompt

fi

done

# == Фамилия

while :

do

echo -n "Employee's Surname :"

read S_NAME

if [ "$S_NAME" != "" ]; then if characters $S_NAME; then

$_NAME_PASS=0

else

$_NAME_PASS=1

fi

if length_check $S_NAME 20; then

LEN_PASS=0

else

LEN_PASS=1

fi

if [ "$LEN_PASS"="0" -a "$S_NAME_PASS"= "0" ]; then

break else

echo "Staff Surname: Non‑Character or Too Many Characters In Field" continue_prompt fi else

echo "Staff Surname: No Input Detected, This Field Requires Characters" continue_prompt fi done

# == Отдел

while :

do

echo -n "Company Department :" read DEPART case $DEPART in

ACCOUNTS|Accounts|accounts) break;;

SALES|Sales|sales) break;; IT|It|it) break;;

CLAIMS|Claims|claims) break;;

Services|SERVICES|services) break;;