登录页面
clear
清空终端,read
读取用户输入,然后利用awk
命令从user.txt中获取用户名和密码,-F指定分隔符为 ‘:’ ,按照第一列识别用户名和密码,第二列为目标数据,输出第二列,并用变量un和pa接收指令运行结果。比较输入的信息与文件中读取的信息,判断是否通过登录,返回登录结果。
Login () {
clear
echo "*******Libary********"
echo -n "Username: "
read name
echo -n "Password: "
read pass
local un=`awk -F ':' '$1=="username"{print $2}' user.txt`
local pa=`awk -F ':' '$1=="password"{print $2}' user.txt`
# user.txt文件格式如下:
# username:apple
# password:12345
if [ $un == $name ] && [ $pa == $pass ]
then
return 0
else
return 1
fi
}
菜单页面
不断循环打印菜单界面,获取用户输入的操作码,然后case
语句根据用户输入的不同操作码执行相应函数,当输入5时直接break
跳出循环。
Menu () {
while true
do
clear
echo "*********Libary*********"
echo " 1.ShowAll "
echo " 2.Search "
echo " 3.AddNew "
echo " 4.Delete "
echo " 5.Exit "
echo "************************"
echo -n ">> "
read opNum
case $opNum in
1)
ShowAll
;;
2)
Search
;;
3)
AddNew
;;
4)
Delete
;;
5)
break
;;
esac
done
}
主函数
先调用Login函数,得到的登录结果暂存在$?
中,判断$?
是否为0,为0就调用Menu函数打印菜单,不然就输出错误信息,结束程序。
Main () {
Login
if [ $? -eq 0 ]
then
Menu
else
echo "Error User or Password"
fi
}
查看图书
先打印表头,然后利用awk
对Book.txt中的每一行文本进行输出,并利用printf
指定输出的格式。在加入一个读取变量t的操作,不然函数会马上退出,回到Menu的循环后会清空之前输出的图书信息,加入读取t的操作可以在用户输入回车后再清空。
ShowAll () {
# Book.txt格式如下:
# Banana Jason 48.00
# Orange David 32.00
echo 'BookName Author Price'
awk '{printf "%-12s%-12s%-12s\n", $1, $2, $3}' Book.txt
read local t
return 0
}
查找图书
读取目标图书名,然后打印表头,之后利用aw
k对Book.txt的每一行进行判断,如果与目标图书名相同则输出。这里要注意再awk的语句中判断$1==$bookName
时直接这样写是无法正常执行的,写成$1=="'$bookName'"
的形式可以正常进行判断。
Search () {
echo -n "Bookname: "
read bookName
echo 'BookName Author Price'
awk '{if($1=="'$bookName'"){ printf "%-12s%-12s%-12s\n", $1, $2, $3 }}' Book.txt
read local t
return 0
}
新增图书
读取新增图书的书名,作者和价格信息后,直接x=$bkn" "$ath" "$pce
将它们拼在一起,然后echo
添加进源文件就行。
AddNew () {
echo -n "Bookname: "
read bkn
echo -n "Author: "
read ath
echo -n "Price: "
read pce
local info=$bkn" "$ath" "$pce
echo $info >> Book.txt
echo "Add \"$bkn\" successfully"
read local t
return 0
}
删除图书
删除图书采用了sed
命令,-i参数直接对源文件实现更改,/^$bkn/d
对每一行的开头进行匹配,对匹配的行执行d删除操作。
Delete () {
echo -n "Bookname: "
read bkn
sed -i "/^$bkn/d" Book.txt
echo "Delete \"$bkn\" successfully"
read local txt
return 0
}
完整源代码
github
https://github.com/Hodakan/Library-Management