exceedsDaysMonth()
{
case $(echo $1 | tr '[:upper:]' '[:lower:]') in
jan*) days=31 ;;
feb*) days=28 ;;
mar*) days=31 ;;
apr*) days=30 ;;
may*) days=31 ;;
jun*) days=30 ;;
jul*) days=31 ;;
aug*) days=31 ;;
sep*) days=30 ;;
oct*) days=31 ;;
nov*) days=30 ;;
dec*) days=31 ;;
*) echo "$0 unknown date $1"
exit 1
esac
if [ $2 -lt 1 -o $2 -gt $days ];then
return 1
else
return 0
fi
}
isLeapYear()
{
year=$1
if [ "$((year % 4))" -ne 0 ];then
return 1
elif [ "$((year % 400 ))" -eq 0 ];then
return 0
elif [ "$((year % 100))" -eq 0 ];then
return 1
else
return 0
fi
}
newdate=$(. normdate.sh $@)
if [ $? -eq 1 ];then
exit 1
fi
month=$(echo $newdate | cut -d\ -f1)
day=$(echo $newdate | cut -d\ -f2)
year=$(echo $newdate | cut -d\ -f3)
if ! exceedsDaysMonth $month $day;then
if [ "$month" = "Feb" -a "$day" = "29" ];then
if ! isLeapYear $year;then
echo "$0 :$year is not a leap year,so Feb doesn't have 20 days."
exit 1
fi
else
echo "$0:bad day value:$month doesn't have $day days."
exit 1
fi
fi
echo "valid date: $newdate"
exit 0
运行结果