1. 程式人生 > >shell實用技巧:檔案統計資訊和銀行賬戶管理系統

shell實用技巧:檔案統計資訊和銀行賬戶管理系統

需求

        寫一個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