背景:
在数仓开发中经常会出现按天的跑批脚本,例如这样 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 可以自由调整时间格式。