Bash for循环日历中的日期序列

时间:2014-02-04 17:06:25

标签: bash date

我希望按照日历运行从start_date到end_date的for循环。格式如下:YYYYMMDD

例如:start_date:20140226,end_date:20140303应该打印20140226, 20140227, 20140228, 20140301, 20140302, 20140303。 谢谢!

3 个答案:

答案 0 :(得分:2)

尝试类似

的内容
#!/bin/bash

start=$(date -d "$1" '+%Y%m%d' 2>/dev/null)
end=$(date -d "$2" '+%Y%m%d' 2>/dev/null)

[[ $start != "" && $end != "" ]] || exit 0
[[ $(date -d "$start" +%s) -le $(date -d "$end" +%s) ]] || exit 0

while :; do
  echo "$start"
  [[ $start -eq $end ]] && exit 0
  start=$(date -d "$start +1days" '+%Y%m%d')
done

e.g。

> ./abovescript 20140226 20140303
20140226
20140227
20140228
20140301
20140302
20140303

答案 1 :(得分:0)

您可以使用-gt编写while循环,并使用以下内容修改从start_date开始的变量:

$start_date=$(date -d "$start_date -1days")

答案 2 :(得分:0)

for i in $(seq 1 20); do date -v-"$i"d +%Y%m%d; done

将20调整为您想要的过去多天。但是,并不完全处理您的开始和结束日期要求,而是从昨天而不是任意日期开始。可能会让你开始。