shell實用技巧:檔案統計資訊和銀行賬戶管理系統
阿新 • • 發佈:2019-01-05
需求
寫一個shell程式命名為wc.sh,統計檔案字元數、行數和單詞數。
寫一個shell程命名為bank.sh,完成以下功能:退出、存款、取款、新增賬戶、刪除賬戶、查詢賬戶、顯示所有賬戶,所有資訊儲存在account.dat檔案中,每次操作會實時更新account.dat檔案。
c版本
實現截圖
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 [email protected]; 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