一个日期的验证批配,实在想不出来。。。

一个日期的验证批配,实在想不出来。。。

和上次那个数字的验证批配相似,要验证一个格式为(dd-mm-yyyy)的日期,要求:
1.其中的dd只能两位数而且要在 01-31之间
2.其中的mm也是只能两位数而且要在01-12之间
3.其中的yyyy只能4位数而且要在1000-9999之间。

在这三个要求中,我只有第三个才会做的出来,而前两个一直都没头绪。
这个大作业就差这块就完成了,请大家帮帮忙。谢谢。。。。      
跟电话号码的匹配差不多啦      
我也试过.....不像电话号码那样简单啊.........如果日期是这样01-31,照电话号码那样匹配就会出现32-39啊!!
这样怎么解决??      
我当时写了一个出了一些问题:
read dd
while [ ! "`echo "$dd"|grep '^[0-3][1-9]\-[0-1][1-9]\-[1-9][0-9]\{8\}$'`" ]
  do
    echo "error date.input again"
    read dd
  done
echo "correct date"


会出现的问题:在我输入的日期的范围不是在01-31而是在01-39,而月份也是一样,它的变围变成01-19而不是正常的01-12。      
提示一下:
复制内容到剪贴板
代码:
[color=blue]-(user@host:tty)-(tmp)-
[20584 0] %[/color] echo -e '1\n2\n3\n4'
1
2
3
4
[color=blue]-(user@host:tty)-(tmp)-
[20584 0] %[/color] echo -e '1\n2\n3\n4' | grep -E '2|4'
2
4
[color=blue]-(user@host:tty)-(tmp)-
[20584 0] %[/color]
      
可以用其它方法实现:
复制内容到剪贴板
代码:
#!/bin/bash
echo "Enter the date,format DAY-MO-YR,and press END over the program!"
date="ok"
while [ "$date" != "END" ]
do
  date1=${date:0:2}
  date2=${date:3:2}
  date3=${date:6:4}
  if(($date1==0 ||$date1>31))
  then
    echo "Day is wrong!"
  elif(($date2==0 || $date2>12))
  then
    echo "Month is wrong!"
  elif(($date3<1000 || $date3>9999))
  then
    echo "Year is wrong!"
  fi
  read date
done
      
echo $* | grep "^[0123][0-9]-[01][012]-[0-9]\{4\}$" | awk -F- '{if( $1 < 32 && $1 > 0 && $2 >0 && $2 < 13 && $3 > 999 && $3 < 10000   ) print "Ok" }'      
echo $* | grep "^[0123][0-9]-[01][012]-[0-9]\{4\}$" | awk -F- '{if( $1 < 32 && $1 > 0 && $2 >0 && $2 < 13 && $3 > 999 && $3 < 10000   ) print "Ok" }'