题目要求:
编写一个录入个人信息的脚本/root/bin/information.sh,要求如下:
1.提示用户输入username(需对名字进行字符要求检查,用户名中不能模糊包含系统中任何一个已在存在用户名,如不能为helloroot1,123bin,ggntp2等。且要求username要以大写字母开头,长度至少5个字符。
2.提示用户输入性别,仅能输入male或female,输入其他的提示用户重试。
3.提示用户输入生日,格式必须为yyyy-mm-dd,并对日期的合法性进行检查,若输入2018-02-30等与现实不符的日期,则提示日期错误,请重试。
4.提示用户输入手机号,长度仅能11位,且务必以13x,18x,15x,17x开头,若错误则提示用户重新输入。
5.提示用户输入×××号,长度可为18位,格式前17位均为数字。要求第7位至第14位所填的内容与第3步的生日符合。同时要求第17位所填的数字若为奇数,那么第2位所填写的性别应为male,反之偶数应为female。最后1位可为数字或x。
6.将以上输入的信息以:为分隔符,保存至/root/info.txt中,每次输入一个用户,会向下追加一行。
如Zhangsan:male:1999-12-20:13588291219:4101011999122030051
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