任務:
設計一個考勤模擬程序,實現如下功能選擇界面,要求使用函數
1.上班簽到
2.下班簽出
3.缺勤信息查閱
4.退出
考勤程序運行后,提示用戶輸入上述功能選擇,並驗證用戶輸入的用戶名和密碼;用戶信息保存在userinfo.dat中。
如果是上班簽到,記錄簽到信息,如果簽到時間大於上午8時,則提示用戶遲到,並記錄該遲到信息到check.dat。
如果是下班簽出,記錄簽出信息,如果簽出時間小於下午6時,則提示用戶早退,並記錄該早退信息到check.dat。
如果用戶選擇缺勤信息查詢,則將check.dat中對應該用戶的遲到早退信息查出並顯示。
用戶選擇功能執行完,shell程序繼續回到功能選擇界面等待下一個用戶進行操作。
代碼:
1 #!/usr/bin/env bash 2 # 考勤模擬程序 3 #作者:於修彥 4 #date 2018/04/08 5 function main(){ 6 echo "------------------------------------------------------------" 7 echo " 歡迎使用考勤程序! " 8 echo "------------------------------------------------------------" 9 10 createInfoFile; 11 12 read -p "請輸入您的賬號: " username 13 read -p "請輸入您的密碼: " password 14 15 isLogin $username $password; 16 17 while [[ 1 == 1 ]]; 18 do 19 menu; 20 read -p "請輸入您的選擇:" choice 21 case $choice in 22 1 ) 23 signIn $username; 24 ;; 25 2 ) 26 logOff $username; 27 ;; 28 3 ) 29 absenceConsult $username; 30 ;; 31 4 ) 32 exit1; 33 ;; 34 * ) 35 echo -e "請選擇功能 1 or 2 or 3 or 4!\n" 36 ;; 37 esac 38 done 39 40 } 41 #菜單 42 function menu(){ 43 echo "------------------------------------------------------------" 44 echo " 1.上班簽到 " 45 echo " 2.下班簽出 " 46 echo " 3.缺勤信息查閱 " 47 echo " 4.退出 " 48 echo "------------------------------------------------------------" 49 } 50 51 #檢查賬號密碼 52 function isLogin(){ 53 while read line 54 do 55 if [[ "$line" == "$1:$2" ]]; then 56 return 0 57 fi 58 done < userinfo.dat #從文件讀入 59 echo "用戶名或密碼錯誤,請重新輸入哦" 60 read -p "請輸入您的賬號: " username 61 read -p "請輸入您的密碼: " password 62 isLogin $username $password; 63 } 64 65 #上班簽到 66 function signIn(){ 67 hour=`date +%H` 68 if [[ $hour -gt 8 ]]; then 69 echo "你上班遲到了呀!已經將遲到信息記錄在check.dat中。" 70 echo "$1 上班遲到————日期:`date`" >> check.dat 71 else 72 echo "上班簽到成功!" 73 fi 74 main; 75 } 76 77 #下班遷出 78 function logOff(){ 79 echo "下班簽出成功!" 80 hour=`date +%H` 81 if [[ $hour -lt 18 ]]; then 82 echo "你現在屬於早退哦!已經將早退信息記錄在check.dat中。" 83 echo "$1 下班早退————日期:`date`" >> check.dat 84 fi 85 main; 86 } 87 88 #缺勤查閱 89 function absenceConsult(){ 90 cat check.dat|grep -n "$1" 91 92 } 93 94 #退出程序 95 function exit1(){ 96 exit 0 97 } 98 99 #創建配置文件 100 function createInfoFile(){ 101 if [[ ! -e userinfo.dat ]]; then 102 touch userinfo.dat #保存用戶名和密碼 103 chmod 777 userinfo.dat 104 fi 105 if [[ ! -e check.dat ]]; then 106 touch check.dat #保存遲到早退信息 107 chmod 777 check.dat 108 fi 109 110 } 111 112 #執行main函數 113 main
結果: