shell脚本制作简易图书管理系统

登录页面

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
}
查找图书

读取目标图书名,然后打印表头,之后利用awk对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

gitee

https://gitee.com/HodakaChen/library-management

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值