加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:43:25 所属栏目:安全 来源:网络整理
导读: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 #判断输入的年月日格式是否

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,代码不规范,还请多多指教!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读