在unix shell脚本中迭代一系列日期

时间:2016-09-10 13:45:02

标签: bash shell sh

我正在尝试创建一个脚本,其中4天前的日期应该等于当前日期,如果不是那么再添加1天并检查。下面是我创建的但仍然不清楚答案。

#!/bin/bash

batchdate=`date --date "4 day ago" '+%Y%m%d'`
matchdate=`date --date "today" '+%Y%m%d'`

for i in {0..4}
do
    if [ $batchdate != $matchdate && $NEXT_DATE != $matchdate ]; then

   NEXT_DATE=$(date +%Y%m%d -d "$batchdate + $i day")

   echo "$NEXT_DATE"

   break

   fi

done

1 个答案:

答案 0 :(得分:5)

首先,定义一个小帮助函数,以避免以稍微不同的方式做同样的事情:

get_date () {
    date +%Y-%m-%d --date "$1"
}

现在,您有两个变量:当前日期,它永远不会改变,以及开始日期,您将一次增加一个日,直到它与当前日期匹配。

then=$(get_date "4 days ago")
now=$(get_date "today")

while [[ $then != $now ]]; do
  then=$(get_date "$then + 1 day")
  echo "$then"
done