我有两个参数作为输入:startdate=20160512
和enddate=20160514
。
我希望能够在我的bash脚本中生成这两个日期之间的日期,不包括startdate,但包括enddate:
20160513 20160514 我正在使用linux机器。 我该如何做到这一点?谢谢。
答案 0 :(得分:9)
使用GNU日期:
$ d=; n=0; until [ "$d" = "$enddate" ]; do ((n++)); d=$(date -d "$startdate + $n days" +%Y%m%d); echo $d; done
20160513
20160514
或者,分布在多行:
startdate=20160512
enddate=20160514
d=
n=0
until [ "$d" = "$enddate" ]
do
((n++))
d=$(date -d "$startdate + $n days" +%Y%m%d)
echo $d
done
d=; n=0
初始化变量。
until [ "$d" = "$enddate" ]; do
开始一个以enddate
结尾的循环。
((n++))
增加日程表。
d=$(date -d "$startdate + $n days" +%Y%m%d)
计算n
之后startdate
天的日期。
echo $d
显示日期。
done
表示循环结束。
答案 1 :(得分:1)
这应该适用于OSX,确保你的startdate小于enddate,其他明智的尝试使用epoch。
startdate=20160512
enddate=20160514
loop_date=$startdate
let j=0
while [ "$loop_date" -ne "$enddate" ]; do
loop_date=`date -j -v+${j}d -f "%Y%m%d" "$startdate" +"%Y%m%d"`
echo $loop_date
let j=j+1
done
答案 2 :(得分:1)
另一种选择是使用dateseq
(http://www.fresse.org/dateutils/#dateseq)中的dateutils
。 -i
更改输入格式,-f
更改输出格式。
$ dateseq -i%Y%m%d -f%Y%m%d 20160512 20160514
20160512
20160513
20160514
$ dateseq 2016-05-12 2016-05-14
2016-05-12
2016-05-13
2016-05-14