需求
写一个shell程序命名为wc.sh,统计文件字符数、行数和单词数。
写一个shell程命名为bank.sh,完成以下功能:退出、存款、取款、添加账户、删除账户、查询账户、显示所有账户,所有信息保存在account.dat文件中,每次操作会实时更新account.dat文件。
c版本
《实用技巧:文件统计信息和银行账户管理系统》:
https://blog.csdn.net/qq21497936/article/details/80026348
实现截图
wc.sh
bank.sh
wc.sh脚本
#!/bin/sh
#获取参数个数
#记录参数个数,从参数1开始计算
argc=$#
function doCmd(){
echo "===== file: $1 ====="
m=`cat $1 | wc -m`
l=`cat $1 | wc -l`
w=`cat $1 | wc -w`
echo "字符数: $m"
echo "换行数: $l"
echo "单词数: $w"
}
#不带参数则手动输入一个文件名
if [ $argc -eq 0 ]
then
read -p "input a file name: " input
# 判断文件是否存在
if [ ! -e $input ]
then
echo "$input is not found"
# 不存在退出
exit
fi
# 打印出文件信息
doCmd $input
else
# 参数传递了文件名字
for par in $@; do
# 打印出文件名
# echo $par
# 判断文件是否存在
if [ ! -e $par ]
then
echo "$par is not found"
# 不存在则退出
exit
fi
#存在,则开始统计数量
doCmd $par
done
fi
exit
bank.sh脚本
#!/bin/bash
# 存储的数据文件
file=accounts.dat
function showMenu()
{
echo "========== 银行账户菜单 =========="
echo "0.退出"
echo "1.存款"
echo "2.取款"
echo "3.添加账户"
echo "4.删除账户"
echo "5.查询账户余额"
echo "6.打印所有账户信息"
echo "================================="
read -p "请输入您的选择(0-6):" number
}
function menu1()
{
read -p "请输入存款账户:" account
read -p "请输入存款金额:" money
# 检查是否有该账户
result=`sed -n "/:$account:/p" $file`
if [ "$result" = "" ]
then
echo "未查找到该账户!!!"
else
balance=`echo $result | awk -F ':' '{ print $5 }'`
total=`echo "scale=2;$balance+$money" | bc`
# 替换
sed -i "s/:$account:$balance/:$account:$total/" $file
echo "存款成功!!!"
fi
}
function menu2()
{
read -p "请输入取款账户:" account
read -p "请输入取款金额:" money
# 检查是否有该账户
result=`sed -n "/:$account:/p" $file`
if [ "$result" = "" ]
then
echo "未查找到该账户!!!"
else
balance=`echo $result | awk -F ':' '{ print $5 }'`
total=`echo "scale=2;$balance-$money" | bc`
# 判读是否为大于等于0
if [ $total -ge 0 ]
then
# 替换
sed -i "s/:$account:$balance/:$account:$total/" $file
echo "取款成功!!!"
else
echo "取款余额不足!!!"
fi
fi
}
function menu3()
{
read -p "请输入 Fisrt name :" firstName
read -p "请输入 Middle name :" middleName
read -p "请输入 Last name :" lastName
read -p "请输入 新帐号 :" account
# 检查该账户是否是6位
if [ `expr length $account` != 6 ]
then
echo "输入账户必须为6位整数!!!"
return
fi
# 检查该账户是否是整数
expr $account + 0 > /dev/null
if [ $? -ne 0 ]
then
echo "输入账户必须为6位整数11!!!"
return
fi
# 检查是否有该账户account
result=`sed -n "/:$account:/p" $file`
if [ "$result" != "" ]
then
echo "账户$account已存在!!!"
return
fi
# 检查是否有该用户信息
result=`sed -n "/$firstName:$middleName:$lastName:/p" $file`
if [ "$result" = "" ]
then
echo "$firstName:$middleName:$lastName:$account:0" >> $file
echo "添加账户$account成功!!!"
else
echo "已存在该用户!!!"
fi
}
function menu4()
{
read -p "请输入删除账户:" account
# 检查该账户是否是6位
if [ `expr length $account` != 6 ]
then
echo "输入账户必须为6位整数!!!"
return
fi
# 检查该账户是否是整数
expr $account + 0 > /dev/null
if [ $? -ne 0 ]
then
echo "输入账户必须为6位整数11!!!"
return
fi
# 检查是否有该账户
result=`sed -n "/:$account:/p" $file`
if [ "$result" = "" ]
then
echo "未查找到该账户!!!"
else
sed -i "/:$account:/d" $file
echo "删除账户$account成功"
fi
}
function menu5()
{
read -p "请输入查询的账户:" account
# 检查该账户是否是6位
if [ `expr length $account` != 6 ]
then
echo "输入账户必须为6位整数!!!"
return
fi
# 检查该账户是否是整数
expr $account + 0 > /dev/null
if [ $? -ne 0 ]
then
echo "输入账户必须为6位整数11!!!"
return
fi
# 检查是否有该账户
result=`sed -n "/:$account:/p" $file`
if [ "$result" = "" ]
then
echo "未查找到该账户!!!"
else
echo "查询到账户信息"
sed -n "/:$account:/p" $file > result
echo $result | awk -F ':' '{ print "First name: " $1 \
" Middle name: " $2 \
" Last name name: " $3 \
" 账户: " $4 \
" 余额: "$5 }'
fi
}
function menu6()
{
index=0
# 循环读取每一行
cat $file | while read line
do
# 第一行是字段标题,直接跳过
if [ $index -eq 0 ]
then
index=`echo "$index+1" | bc`
continue
fi
# 输出每一行
echo $line | awk -F ':' '{ print "First name: " $1 \
" Middle name: " $2 \
" Last name name: " $3 \
" 账户: " $4 \
" 余额: " $5 }'
done
}
while true
do
showMenu;
if [ "$number" = "" ]
then
echo "输入错误!!!"
elif [ $number -eq 0 ]
then
exit
elif [ $number -eq 1 ]
then
menu1;
elif [ $number -eq 2 ]
then
menu2;
elif [ $number -eq 3 ]
then
menu3;
elif [ $number -eq 4 ]
then
menu4;
elif [ $number -eq 5 ]
then
menu5;
elif [ $number -eq 6 ]
then
menu6;
else
echo "输入错误!!!"
fi
done
exit