shell按日期的循环

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值