shell脚本不用data函数实现日期查询

shell脚本实现查询指定日期的前N天或后N天

  1 #!/bin/bash
  2 func(){
  3 read -p "请输入年月日(格式:2019-01-01): " date
  4 if echo $date |grep -Eq "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}" && date -d $date +%Y%m%d >/dev/null 2>&1  #判断输入的年月日格式是否正确
  5 then
  6     year=${date:0:4}
  7     month=${date:5:2}
  8     day=${date:8:2}
  9     read -p "请输入1(向前查找)或2(向后查找):" num
 10         #判断输入是否正确
 11         if [[ "$num" =~ ^[1,2]{1}+$ ]];then
 12                 calculate   #如果
 13         else
 14                 echo "请按要求输入!"
 15                 func 
 16         fi
 17 else
 18     echo '请输入正确格式的日期!'
 19         func
 20 fi
 21 }
 22 #获取月份对应的天数
 23 getDay(){
 24         case $2 in
 25               1|3|5|7|8:|10|12) day=31;;
 26               4|6|9|11) day=30;;
 27               2)
 28                 if [ `expr $1 % 4` -eq 0 -a `expr $1 % 100` -ne 0 ]; then
 29                     day=29
 30                   elif [ `expr $1 % 400` -eq 0 ]; then
 31                     day=29
 32                   else
 33                     day=28
 34                  fi
 35               ;;
 36               esac
 37         return $day
 38 }
 39 calculate(){
 40 #向前查找
 41     if [ $num -eq 1 ];then
 42         read -p "请输入您想向前查找的天数:" fnum
 43     if [[ "$fnum" =~ ^[0-9]+$ ]];then  #判断输入是否正确
 44         N=`expr ${date:8:2} - $fnum`
 45         flag=1
 46         while true
 47             do
 48              #如果月份是一月并且查找的日期要跨月
 49             if [ $month -eq 1 -a $N -le 0 ];then
 50                 year=`expr $year - 1`
 51                 month=12
 52                 N=`expr $N + 31`
 53               fi
 54            #如果月份不是一月并且查找的日期要跨月
 55            if [ $month -ne 1 -a $N -le 0 ];then
 56                 month=`expr $month - 1`
 57                 getDay $year $month
 58                 N=`expr $N + $?`
 59               fi
 60            #当需要向前查找的天数小于月份的天数时退出循环
 61            if [ $N -gt 0 ]
 62                 then
 63                 day=$N
 64                 break
 65               fi
 66             done
 67         #打印出结果
 68         echo "您输入的日期为:"$date
 69         echo "您要查找的日期为:$year-$month-$day"
 70     else 
 71         echo "查找的天数请输入纯数字!"
 72         func
 73     fi
 74        fi
 75 #向后查找
 76     if [ $num -eq 2 ];then
 77         read -p "请输入您想向后查找的天数:" bnum
 78     if [[ "$bnum" =~ ^[0-9]+$ ]];then  #判断输入是否正确
 79         N=`expr ${date:8:2} + $bnum`
 80         flag=1
 81         while true
 82           do
 83         month=`expr $month + 0`
 84         getDay $year $month
 85         maxMonth=$?
 86         #当月份为12月并且查找的日期需要跨月
 87             if [ $N -gt $maxMonth -a $month -eq 12 ];then
 88                 year=`expr $year + 1`
 89                 month=1
 90                 N=`expr $N - $maxMonth`
 91               fi
 92         #当月份不是12并且查找的日期需要跨月
 93             if [ $N -gt $maxMonth -a $month -ne 12 ];then
 94                 month=`expr $month + 1`
 95                 N=`expr $N - $maxMonth`
 96               fi
 97             getDay $year $month
 98         #当向后查找的天数不会跨月时退出循环
 99             if [ $N -le $? ];then
100                 day=$N
101                 break
102               fi
103           done
104         #打印出结果
105         echo "您输入的日期为:"$date
106         echo "您要查找的日期为:$year-$month-$day"
107     else 
108         echo "查找的天数请输入纯数字!"
109         func
110     fi
111       fi
112 
113 }
114 func

初学Linux,代码不规范,还请多多指教!

猜你喜欢

转载自www.cnblogs.com/y-strive/p/11399136.html