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