題目要求:bash
編寫一個錄入我的信息的腳本/root/bin/information.sh,要求以下:ide
1.提示用戶輸入username(需對名字進行字符要求檢查,用戶名中不能模糊包含系統中任何一個已在存在用戶名,如不能爲helloroot1,123bin,ggntp2等。且要求username要以大寫字母開頭,長度至少5個字符。spa
2.提示用戶輸入性別,僅能輸入male或female,輸入其餘的提示用戶重試。orm
3.提示用戶輸入生日,格式必須爲yyyy-mm-dd,並對日期的合法性進行檢查,若輸入2018-02-30等與現實不符的日期,則提示日期錯誤,請重試。it
4.提示用戶輸入手機號,長度僅能11位,且務必以13x,18x,15x,17x開頭,若錯誤則提示用戶從新輸入。io
5.提示用戶輸入×××號,長度可爲18位,格式前17位均爲數字。要求第7位至第14位所填的內容與第3步的生日符合。同時要求第17位所填的數字若爲奇數,那麼第2位所填寫的性別應爲male,反之偶數應爲female。最後1位可爲數字或x。form
6.將以上輸入的信息以:爲分隔符,保存至/root/info.txt中,每次輸入一個用戶,會向下追加一行。class
如Zhangsan:male:1999-12-20:13588291219:4101011999122030051sed
1 #!/bin/bash 2 read -p "請輸入username: " username 3 #提示用戶輸入username(需對名字進行字符要求檢查,用戶名中不能模糊包含系統中任何一個已在存在 4 #要求username要以大寫字母開頭,長度至少5個字符 5 cat /etc/passwd |cut -d: -f1 > /root/passwd 6 while read line 7 do 8 if [[ $username != *${line}* ]] && [[ $username == [[:upper:]]????* ]] ;then 9 continue 12 exit 1 13 fi 14 done < /root/passwd 15 16 #提示用戶輸入性別,僅能輸入male或female,輸入其餘的提示用戶重試 17 while read -p "請輸入性別: " gender 18 do 19 if [ $gender == male ] || [ $gender == female ] ;then 20 break 21 else 22 echo "請重試" 23 continue 24 fi 25 done 26 27 #提示用戶輸入生日,格式必須爲yyyy-mm-dd,並對日期的合法性進行檢查,若輸入2018-02-30等與現實不符的日期, 28 #則提示日期錯誤,請重試 29 while read -p "請輸入生日(yyyy-mm-dd): " birthday 30 do 31 if [[ $birthday == [1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]] && [[ $birthday < `date +%F` ]] && cal $(echo $birthday |sed -r 's/(.*)-(.*)-(.*)/\3 \2 \1/') &> /dev/null ;then 32 break 33 else 34 echo "日期錯誤,請從新輸入" 35 continue 36 fi 37 done 38 39 #提示用戶輸入手機號,長度僅能11位,且務必以13x,18x,15x,17x開頭,若錯誤則提示用戶從新輸入 40 while read -p "請輸入手機號: " telnum 41 do 42 if [[ $telnum == 1[3578]x[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9] ]] ;then 43 break 44 else 45 echo "請從新輸入" 46 continue 47 fi 48 done 49 50 #提示用戶輸入×××號,長度可爲18位,格式前17位均爲數字。要求第7位至第14位所填的內容與第3步的生日符合。同時要求第17位 51 #所填的數字若爲奇數,那麼第2步所填寫的性別應爲male,反之偶數應爲female。最後1位可爲數字或x 52 read -p "請輸入×××號: " ID 53 case $gender in 54 male) 55 if [[ $ID == [0-9][0-9][0-9][0-9][0-9][0-9]`echo $birthday |tr -d "-"`[0-9][0-9][13579][0-9x] ]] ;then 56 echo "輸入正確" 57 else 58 echo "輸入的×××號不正確" 59 exit 3 60 fi 61 ;; 62 female) 63 if [[ $ID == [0-9][0-9][0-9][0-9][0-9][0-9]`echo $birthday |tr -d "-"`[0-9][0-9][02468][0-9x] ]] ;then 64 echo "輸入正確" 65 else 66 echo "輸入的×××號不正確" 67 exit 3 68 fi 69 ;; 70 *) 71 echo "性別不符" 72 exit 4 73 ;; 74 esac 75 76 #將以上輸入的信息以:爲分隔符,保存至/root/info.txt中,每次輸入一個用戶,會向下追加一行 77 cat << EOF >> /root/info.txt 78 $username:$gender:$birthday:$telnum:$ID 79 EOF 80 rm -f /root/passwd