欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell按日期的循环 博客分类: shell工作经验  

程序员文章站 2024-03-15 10:30:29
...

        经常有需要按日期运行脚本补数据。有时候是好几天的。但是可能整个过程下来会超过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