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,代码不规范,还请多多指教! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |