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

Ami*_*one 2 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
Run Code Online (Sandbox Code Playgroud)

che*_*ner 5

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

get_date () {
    date +%Y-%m-%d --date "$1"
}
Run Code Online (Sandbox Code Playgroud)

现在,你有两个变量:当前日期,这将永远不会改变,并开始日期,你会增加一个在一天的时间,直到它当前的日期相匹配.

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

while [[ $then != $now ]]; do
  then=$(get_date "$then + 1 day")
  echo "$then"
done
Run Code Online (Sandbox Code Playgroud)