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