如何在shell脚本中以格式%Y%m%d打印两个日期之间的日期?

buz*_*ops 6 bash shell date

我有两个参数作为输入: startdate=20160512enddate=20160514.

我希望能够在我的bash脚本中生成这两个日期之间的日期,不包括startdate,但包括enddate:

20160513 20160514我正在使用linux机器.我该如何做到这一点?谢谢.

Joh*_*024 11

使用GNU日期:

$ d=; n=0; until [ "$d" = "$enddate" ]; do ((n++)); d=$(date -d "$startdate + $n days" +%Y%m%d); echo $d; done
20160513
20160514
Run Code Online (Sandbox Code Playgroud)

或者,分布在多行:

startdate=20160512
enddate=20160514
d=
n=0
until [ "$d" = "$enddate" ]
do  
    ((n++))
    d=$(date -d "$startdate + $n days" +%Y%m%d)
    echo $d
done
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • d=; n=0

    初始化变量.

  • until [ "$d" = "$enddate" ]; do

    开始一个结束的循环enddate.

  • ((n++))

    增加日计数器.

  • d=$(date -d "$startdate + $n days" +%Y%m%d)

    计算n之后几天的日期startdate.

  • echo $d

    显示日期.

  • done

    发出循环结束的信号.

  • 使用gnu日期你可以这样简化:`d = $(date --date ="$ startdate + $ n days")` (2认同)