经常有需要按日期运行脚本补数据。有时候是好几天的。但是可能整个过程下来会超过24个小时。
最早的时候是这样的一个方案。
for((i=0;i<10;i++));
do
date=`date -d "$i days ago" +"%Y%m%d"`
sh dojob.sh $date
done
这个方案的不足就是,跨天之后,会漏掉某个日期。后来诞生了一个用配置文件的方法。把要搞的日期写到一个文本里。每行写一个日期。
file=/data/datelist.txt
while read day
do
sh dojob.sh ${day}
done < $file
这个方案就是利用了类似配置文件的方法。对于离散的日期,可以这样的方式来实现。
对于方案1,还有一种修改的方案。就是利用数组的方式。
for day in {20160801..20160811}
do
sh dojob.sh $day
done
不足之处就是没办法跨月。所以还可以利用时间戳来处理。
startDate='20160621'
endDate='20180620'
for((ts=`date -d "${startDate}" +"%s"`;ts<=`date -d "${endDate}" +"%s"`;ts+=86400 ));
do
day=`date -d @${ts} +"%Y%m%d"`
sh dojob.sh $day
done
上例的再次改良版本(时间跨度可以支持年,月,日):
startDate=20171201 endDate=20171205 while [[ $startDate -le $endDate ]]; do echo $startDate startDate=`date -d "$startDate 1 days" +"%Y%m%d"` done


5231

被折叠的 条评论
为什么被折叠?



