背景:
在数仓开发中经常会出现按天的跑批脚本,例如这样 sh cmd 2022-01-01
现在有同学 需要2022年一月的都执行 sh cmd 脚本 ,有一些同步 可能会说简单,
写一个脚本
sh cmd 2022-01-01
sh cmd 2022-01-04
sh cmd 2022-01-03
.......
sh cmd 2022-01-31
这种方式肯定也可以,那么有没有更简便的方法,比如:一个命令输入开始时间和结束时间按日期执行脚本呢。
当然有:
day.sh
#!/bin/bash
STARTDAY=2019-01-01
ENDDAY=`date "+%Y-%m-%d"`
if [ -z "$2" ]; then
STARTDAY=$STARTDAY
else
STARTDAY=$2
fi
if [ -z "$3" ]; then
ENDDAY=$ENDDAY
else
ENDDAY=$3
fi
echo $STARTDAY
echo $ENDDAY
CMD=$1
S=`date -d "$STARTDAY" +%Y%m%d`
E=`date -d "$ENDDAY" +%Y%m%d`
while [[ "$S" -le "$E" ]];
do
S=`date -d "$S" +%Y-%m-%d`
USERS=`date -d "$S" +%Y%m%d`
echo $S
sh $CMD $S >>log1.log 2>&1
S=$(date -d "$USERS+1days" +%Y%m%d)
done
那如果要跑批执行cmd 脚本,
sh day.sh cmd 2022-01-01 2022-01-31
如果时间格式为20220101 可以自由调整时间格式。

本文介绍了一种在数仓开发中按日期范围自动化执行脚本的方法,通过编写shell脚本day.sh,允许用户输入开始和结束日期,自动生成并执行指定命令,如shcmd,简化了逐日手动执行的繁琐过程。该脚本适用于需要连续多日运行相同任务的场景,提高了工作效率。
356

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



