22-创建屏幕输入之增加记录
时间:2005-01-03 来源:wingger
该脚本有错
#pg dbase_add
#!/bin/sh
#dbase_add
#add a record
#ignore signals
trap "" 2 3 15
#temp hold files
DBFILE=DBFILE
HOLD1=HOLD1.$$
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()
_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
echo $_ANS
done
}
continue_prompt()
{
echo -n "Hit any key to continue.."
DUMMY=`read_a_char`
}
length_check()
{
_STR=$1
_MAX=$2
_LENGTH=`echo $_STR|awk '{print length($0)}'`
if [ "$_LENGTH" -gt "$_MAX" ]; then
return 1
else
return 0
fi
}
a_number()
{
_NUM=$1
_NUM=`echo $1|awk '{if($0~/[^0-9]/)print "1"}'`
if [ "$_NUM" != "" ]
then
return 1
else
return 0
fi
}
characters()
{
_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()
{
_CODE=$1
MATCH=`grep "$_CODE>" $DBFILE`
echo $_CODE
if [ "$MATCH" = "" ];then
return 0
else
return 1
fi
}
add_rec()
{
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
DUPLICATE=0
else
DUPLICATE=1
echo "staff number :there is 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
#First name
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
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
#SURNAME
while :
do
echo -n "employee;s surname :"
read S_NAME
if [ "$S_NAME" != "" ];then
if characters $S_NAME;then
S_NAME_PASS=0
else
S_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
#department
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;;
*)echo "department: Accounts,sales,it,claims,services";;
esac
done
}
#main
clear
echo -e "tttADD A EMPLOYEE RECORT"
if [ -s $DBFILE ];then :
else
echo "Information : creating new file to add employee records"
>$DBFILE
fi
add_rec
if continue_promptYN "Do you wish to save this recore " "Y";then
echo "$NUM:$F_NAME:$S_NAME:$DEPART" >>DBFILE
echo "record save"
sleep 1
sort +2 -t: $DBFILE >$HOLD1 2> /dev/null
if [ $? -ne 0 ];then
echo "problems trying to sort the file..check it out"
exit 1
fi
mv $HOLD1 $DBFILE
if [ $? -ne 0 ];then
echo "problems moving the temp sort file check it out "
exit 1
fi
else
echo "record not saved "
sleep 1
fi