如何在linux中读取开始日期和结束日期之间的所有日期

时间:2017-09-29 10:57:50

标签: linux bash

我想阅读两个日期范围之间的所有日期,此范围包括开始日期和结束日期

 input_start_date="2013-09-05"
 input_end_date="2013-09-10"

 START_DATE=$(date -I -d "$input_start_date") || exit -1
 END_DATE=$(date -I -d "$input_end_date")     || exit -1

 d="$START_DATE"
 while [ "$d" <= "$END_DATE" ]; do 
  echo $d
   d=$(date -I -d "$d + 1 day")
 done

但是当我运行上面的代码时,我得到以下错误

 bash: = 2013-09-10: No such file or directory

有人可以帮我解决这个问题

预期输出

  2013-09-05
  2013-09-06
  2013-09-07
  2013-09-08
  2013-09-09
  2013-09-10

4 个答案:

答案 0 :(得分:4)

start=2013-09-05
end=2013-09-10
   while [[ $start < $end ]] 
     do 
      printf "$start\n"; start=$(date -d "$start + 1 day" +"%Y-%m-%d") 
     done

或者你可以尝试这个

END=$(date -d "2013-09-10" +%s);
DATE=$(date -d "2013-09-05" +%s); 
while [[ "$DATE" -le "$END" ]]; do date -d "@$DATE" +%F; let DATE+=86400; done

答案 1 :(得分:3)

这个想法是正确的,但是你的操作符错了,var targetIndex = Array.FindIndex(x => x.gameObject == target); 无法与<=中的date字符串一起使用,你需要一个不等式运算符bash条件。

!=

while [ "$d" != "$enddate" ]; do 运算符在<=中使用bash运算符用于算术上下文时有效。

答案 2 :(得分:1)

awk中的一些东西(由于没有测试数据,只是预期的输出,因此改变了范围):

$ awk '$0>="2013-09-06" && $0<="2013-09-09"' file
2013-09-06
2013-09-07
2013-09-08
2013-09-09

答案 3 :(得分:1)

你需要一个do-while循环,bash没有提供。 <怎么样

date="$start_date"
while true; do 
    echo "$date"
    [[ $date = "$end_date" ]] && break
    date=$(date -d "$date + 1 day" "+%F")
done

不要使用ALL_CAPS_VAR_NAMES - 太容易错误地覆盖shell /系统变量。