shell脚本日期遍历(按天&按小时)

使用shell脚本遍历日期

1. 按天倒序遍历日期 ( 正序修改一下日期增减函数即可 )

#!/bin/bash

#倒序按天遍历日期

#传入遍历的开始时间和结束时间
startdate="$1"
enddate="$2"

echo 'startdate: '$startdate
echo 'enddate: '$enddate
echo "-----------------------------------"

#序列1-300,表示遍历300次,因为有结束时间的限制,所以实际上不会循环300次
for i in `seq 1 300`; do 
  #当开始时间小于结束时间时,直接结束脚本
  if [[ $startdate -lt $enddate ]]; then
    break
  fi
  echo $startdate 
  #执行hiveSQL脚本,我是需要按日期执行hiveSQL,这里可以无视
  hive -hiveconf input_date=$startdate -f mergeSmallFiles.sql # >> mergeSmallFiles.txt
  #每次执行后,使开始日期减一天,如果要正序,将下面-1换成+1即可,当然开始时间和结束时间也要换一下
  startdate=$(date -d "$startdate -1 day" +%Y%m%d)
done

运行结果如下:

 

2. 按小时倒序遍历日期 ( 正序修改一下日期增减函数即可 )

    因为shell中没有小时加减的函数,所以这里要做几个步骤:

#!/bin/bash

#倒序按小时遍历时间

startdate="$1"
enddate="$2"

echo 'startdate: '$startdate
echo 'enddate: '$enddate
echo "-----------------------------------"

for i in `seq 1 300`; do
  if [[ $startdate -lt $enddate ]]; then
    break
  fi
  
  echo $startdate
  #拼接成YYYYmmdd HH的格式,否则使用下个命令中+%s,会无法转换
  startdate=${startdate:0:4}"-"${startdate:4:2}"-"${startdate:6:2}" "${startdate:8:2}
  #转换成时间戳,+%s为时间格式
  startdate=$(date +%s -d "$startdate")
  #每次执行后,开始日期减一个小时
  startdate=$(($startdate-1*60*60))
  #时间戳转正常格式时间
  startdate=$(date +%Y%m%d%H -d "1970-01-01 UTC $startdate seconds")  
  #执行hiveSQL脚本,可以无视掉
  hive -hiveconf input_date=$startdate -f mergeSmallFiles.sql # >> mergeSmallFiles.txt
done

运行结果如下:

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值