码迷,mamicode.com
首页 > 系统相关 > 详细

shell脚本练习题

时间:2018-02-27 10:56:15      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:shell脚本编程   循环结构的使用   

题目要求:

    编写一个录入个人信息的脚本/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


shell脚本练习题

标签:shell脚本编程   循环结构的使用   

原文地址:http://blog.51cto.com/13570193/2073349

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!