1.循环脚本说明
seq 0 1000 是一个0-1000 的集合,包含前后。
下面脚本是执行的时bizdate 和 curdate 日期之间的 import_t_std_stock_info_daily这个函数。包含bizdate和 curdate 的日期,最长时间间隔为(1001)天
注:脚本1和脚本2的执行结果是一样的
脚本1.sh
# !/bin/bash
# 定义初始时间
bizdate=2019-12-27
curdate=2021-03-11
# 定义sqoop导入函数
import_t_std_stock_info_daily() {
hive -e "load data inpath '/origin_data/tclmember/events/3/events/$bizdate.txt' OVERWRITE into table tclmember.events partition(dt='$bizdate');"
}
# 循环
for i in `seq 0 1000`
do
import_t_std_stock_info_daily
bizdate=`date -d "${bizdate} +1 day" "+%Y-%m-%d"`
#循环到当天,就退出
if [ $bizdate == $curdate ]
then
break
fi
done
脚本2.sh
#!/bin/bash
# 定义初始时间 测试最小时间2019-07-22 生产最小时间2019-06-03
start='2019-07-22'
end='2021-11-10'
# 因 start 取不到 end 值,最后输出范围是 [start,end) ,先执行:
end=`date -d "1 day ${end}" +%Y-%m-%d` # 日期自增
while [[ ${start} != ${end} ]]
do
echo "=====开始日期为 $start===结束日期为 $end====="
echo ${start}
# 给脚本传参
bash /root/bin/t_xiaoke/sh/aa.sh ${start}
start=`date -d "1 day ${start}" +%Y-%m-%d` # 日期自增
# 循环到当天就退出
if [ $start == $end ]
then
break
fi
done
脚本3.sh
#!/bin/bash
if [ -n "$1" ] && [ -n "$2" ]
then
startDate=$1
endDate=$2
elif [ -z "$1" ] && [ -z "$2" ]
then
startDate=`date -d '-1 day' +'%Y-%m-%d'`
endDate=`date +'%Y-%m-%d'`
else
exit
fi
# 定义sqoop导入函数
loop_function() {
# 获取指定日期数据
/root/bin/sms_platform/sqoop_import_sms_platform.sh "$startDate" "$endTime"
# 加载数据到dwd层
/root/bin/sms_platform/insert_dwd_sms_message_detail_inc_daily.sh "$startDate"
}
# 循环
for i in `seq 0 1000`
do # 执行结束时间为开始时间加1天
endTime=`date -d "${startDate} +1 day" "+%Y-%m-%d"`
echo "===开始时间为$startDate,结束时间为$endTime==="
# 函数调用
loop_function
# 开始时间加一天
startDate=`date -d "${startDate} +1 day" "+%Y-%m-%d"`
#循环到开始时间等于循环结束时间,就退出
if [ $startDate == $endDate ]
then
break
fi
done