实验题目: shell脚本实验
实验目的:学会利用shell的控制逻辑及语法完成shell的脚本设计并进行脚本功能的验证
实验器材: linux bash
一、实验功能设计
1.设计一个超市商品信息管理系统
2.主要包括商品的编号(唯一)、商品名称、商品进价、商品售价这几项信息。
3.通过编码实现商品的增删改查操作
二、源代码
1.商品信息功能选择页面
通过在菜单上选择功能序号跳转到具体的功能实现函数模块。
Goods_Info_page(){
echo -e "\t-----------欢迎使用超市商品管理系统------------"
echo -e "\t* 1.商品信息添加. *"
echo -e "\t* 2.商品信息修改. *"
echo -e "\t* 3.商品信息删除. *"
echo -e "\t* 4.查看单个商品信息. *"
echo -e "\t* 5.查看所有商品信息. *"
echo -e "\t* 0.退出系统. *"
echo -e "\t* 小组成员:LWJ、LXH、WT *"
echo -e "\t-----------------------------------------------"
echo -n "请输入功能选择(0~5):"
if [ -f ./Goods_Info.dat ]
then
:
else
touch ./Goods_Info.dat
fi
while [ true ] ; do
read select
case $select in
1) add_Goods_Info ;;
2) modify_Goods_Info ;;
3) del_Goods_Info ;;
4) search_Goods_Single_Info ;;
5) view_Goods_Info ;;
0) quit_Program ;;
*) erro_chose_function ;;
esac
done
}
运行结果:
2.查看单个商品信息
search_Goods_Single_Info(){
#检测ID有效性
while [ true ] ; do
echo -n "请输入要查询的商品ID(1000~~):"
read gid
ID_flag=$(echo "$gid" | grep -c "^[0~9]\{4,10\}$")
if [ "$ID_flag" = "" ]
then
echo "警告:ID输入不合法,请按照要求输入!"
continue
fi
#检测ID是否存在
count=$(grep "$gid" $Goods_Info | wc -l)
if [ "$count" = "0" ]
then
echo "商品ID不存在,请输入正确的ID~"
continue
fi
break
done
lineNum=$(grep -n $gid $Goods_Info |cut -d ":" -f 1)
echo -e "ID\t商品\t进价\t价格\t售价\t价格"
sed -n "${lineNum}p" $Goods_Info
while [ true ] ; do
echo -n "是否继续查询:(Y or N):"
read make_sure
case "$make_sure" in
y | Y) search_Goods_Single_Info;;
n | N) Goods_Info_page ;;
*) echo "警告:输入错误!请按照要求输入!" ;;
esac
done
}
运行结果:
3.商品信息添加
add_Goods_Info(){
#检测ID有效性
while [ true ] ; do
echo -n "输入商品ID(1000~~)"
read gid
ID_flag=$(echo "$gid" |grep -c "^[0-9]\{4,10\}$")
if [ "$ID_flag" = "0" ]
then
echo "警告:ID输入不合法,请按照要求输入!"
continue
fi
#检测ID是否存在
count=$(grep "$gid" $Goods_Info | wc -l)
if [ "$count" = "1" ]
then
echo "商品ID已经存在,无法添加商品~"
continue
fi
break
done
while [ true ] ; do
read -p "请输入商品名称:" name
if [ "$name" = "" ] ; then
echo "商品名称不能为空!!请重新输入!!"
continue
else
break
fi
done
echo -ne "$gid\t$name" >> $Goods_Info
#输入商品的进价和售价:
echo "请输入商品价格(0~100)"
i=2
while [ "$i" -gt 0 ] ; do
case "$i" in
"2") cname="进价" ;;
"1") cname="售价" ;;
esac
echo -ne "\t$cname" >> $Goods_Info
#检测价格有效性
while [ true ] ; do
echo -n "输入$cname:"
read price
if [ "$price" = "" ]
then
echo "价格不能为空!请重新输入"
continue
fi
if [ "$price" -gt -1 -a "$price" -lt 101 ]
then
:
else
echo "警告:输入不符合要求,请重新输入!范围:0~100"
continue
fi
echo -ne "\t$price" >> $Goods_Info
break
done
i=$((i-1)) #接下来输入售价
done
#判断添加完成一条记录的后续操作
while [ true ] ; do
echo -n "是否继续添加:(Y or N):"
read make_sure
case "$make_sure" in
y | Y) add_Goods_Info ;;
n | N) Goods_Info_page ;;
*) echo "警告:输入错误! 请按照要求输入!";;
esac
done
}
运行结果:
4.商品信息修改
modify_Goods_Info(){
#检测ID有效性
while [ true ] ; do
echo -n "输入要修改的商品ID (1000~~):"
read gid
ID_flag=$(echo "$gid" |grep -c "^[0-9]\{4,10\}$")
if [ "$ID_flag" = "0" ]
then
echo "警告:ID输入不合法,请按照要求输入!"
continue
fi
count=$(grep "$gid" $Goods_Info | wc -l)
if [ "$count" = "0" ]
then
echo "警告:商品ID不存在!无法修改~"
continue
fi
break
done
#获取指定商品编号和名称
lineNum=$(grep -n $gid $Goods_Info |cut -d ":" -f 1 )
name=$(cat $Goods_Info | awk '{print $2 }'| sed -n ''"$lineNum"'p')
newInfo=$gid"\t"$name
#统一输入商品要修改的进价与售价:
echo "请修改价格(0~100)"
i=2
while [ "$i" -gt 0 ] ; do
case "$i" in
"2") cname="进价" ;;
"1") cname="售价" ;;
esac
newInfo=$newInfo"\t"$cname
#检测价格有效性
while [ true ] ; do
echo -n "请输入$cname价格:"
read price
if [ "$price" = "" ]
then
echo "价格不能为空,请重新输入!"
continue
fi
if [ "$price" -gt -1 -a "$price" -lt 101 ]
then
:
else
echo "警告:输入不符合要求,请重新输入!范围:0~100"
continue
fi
break
done
i=$((i-1))
newInfo=$newInfo"\t"$price
done
echo "原记录为:"
echo -e $(grep $gid $Goods_Info )
echo "新纪录为:"
echo -e $newInfo
lineNum=$(grep -n $gid $Goods_Info |cut -d ":" -f 1)
while [ true ] ; do
echo -n "确定要记录修改?(Y or N):"
read make_sure
case "$make_sure" in
Y | y) sed -i ' '"$lineNum"'s/.*/'"$newInfo"'/ ' $Goods_Info
echo "修改成功!"
break ;;
N | n) Goods_Info_page ;;
*) echo "警告:输入错误!请重新输入!" ;;
esac
done
#判断修改完成一条记录的后续操作
while [ true ] ; do
echo -n "是否继续修改:(Y or N):"
read make_sure
case "$make_sure" in
Y | y) modify_Goods_Info ;;
N | n) Goods_Info_page ;;
*) echo "警告:输入错误!请按照要求输入!" ;;
esac
done
}
运行结果:
5.商品信息删除
del_Goods_Info(){
while [ true ] ; do
echo -n "输入要删除的商品ID(1000~~):"
read gid
ID_flag=$(echo "$gid" |grep -c "^[0-9]\{4,10\}$")
if [ "$ID_flag" = "0" ]
then
echo "警告:ID输入不合法,请按照要求输入!"
continue
fi
count=$(grep "$gid" $Goods_Info | wc -l)
if [ "$count" = "0" ]
then
echo "警告:该商品ID不存在!无法删除~"
continue
fi
break
done
echo "原记录为:"
echo -e $(grep $gid $Goods_Info)
while [ true ] ; do
echo -n "确定要删除记录?(Y or N):"
read make_sure
case "$make_sure" in
Y | y) sed -i '/'"$gid"'/d' $Goods_Info
echo "删除成功!"
break ;;
N | n) Goods_Info_page ;;
*) echo echo "警告:输入错误!请重新输入!"
esac
done
#判断删除完成一条记录的后续操作
while [ true ] ; do
echo -n "是否继续删除:(Y or N):"
read make_sure
case "$make_sure" in
Y | y) del_Goods_Info ;;
N | n) Goods_Info_page ;;
*) echo "警告:输入错误!请按要求输入!" ;;
esac
done
}
运行结果:
6.显示全部商品信息
view_Goods_Info(){
echo -e "------------------------------------------------------------"
echo -e "商品信息列表:"
echo -e "ID\t商品名\t进价\t价格\t售价\t价格"
cat $Goods_Info
echo -e "------------------------------------------------------------"
echo -e "按回车键退出!"
read some
Goods_Info_page
}
运行结果:
7.退出程序
quit_Program(){
echo "bye! 欢迎下次使用~"
exit
}
运行结果:
三、实验结果及分析总结
通过设计增删改查函数实现了商品信息的增删改查操作,能在终端上实现对应功能。