在实际的工作中,我们经常需要计算每天、每小时的数据。一般这种情况可以使用python、R等软件,运用while、for等循环语句实现。但如果进行数据插入或涉及多种软件语言操作的情况,则最好要学会如何遍历输出时间,并使用输出的时间来执行脚本。
正序遍历日期
start_date="$1"
end_date="$2"
echo "-----------------------------------"
echo 'start_date: '$start_date
echo 'end_date: '$end_date
echo "-----------------------------------"
while [ "$(date -d "$start_date -1 days" "+%Y-%m-%d")" != "$end_date" ];
do
echo $start_date 'start'
bash insert_data.sh $start_date
echo $start_date 'success'
start_date=`date -d "$start_date +1 days" "+%Y-%m-%d"`
done
接下来,将对脚本中的各步骤进行介绍。
传参过程
start_date="$1"
end_date="$2"
bash xx.sh 2021-10-10 2021-10-23
即可将2021-10-10传为start_date,2021-10-23传为end_date。
传参结果展示
echo "-----------------------------------"
echo 'start_date: '$start_date
echo 'end_date: '$end_date
echo "-----------------------------------"
即利用echo输出参数。如传参成功,则会如下方截图所示,否则冒号后无数据。
循环输出日期并执行脚本
while [ "$(date -d "$start_date -1 days" "+%Y-%m-%d")" != "$end_date" ];
do
echo $start_date 'start'
bash insert_data.sh $start_date
echo $start_date 'success'
start_date=`date -d "$start_date +1 days" "+%Y-%m-%d"`
done
while [ "$(date -d "$start_date 1 days ago" "+%Y-%m-%d")" != "$end_date" ];
while [[ $start_date -le $end_date ]];
其中-le指小于等于,而类似地,-ge指大于等于,-gt指大于,-lt指小于,-eq指等于,-ne指不等于。
对于执行脚本的阶段:
echo $start_date 'start'
bash insert_data.sh $start_date
echo $start_date 'success'
start_date=`date -d "$start_date +1 days" "+%Y-%m-%d"`
echo可以表明哪个日期准备执行脚本及已成功执行脚本,bash则可替换成任何需要执行的脚本语句,之后则可日期后延一天,重新执行脚本。如成功,则除脚本执行部分,会输出如下提示:
变体一:倒叙遍历日期
循环部分可替换如下:
while [ "$(date -d "$start_date -1 days" "+%Y-%m-%d")" != "$end_date" ];
do
echo $end_date 'start'
bash insert_data.sh $end_date
echo $end_date 'success'
end_date=`date -d "$end_date -1 days" "+%Y-%m-%d"`
done
变体二:正序遍历小时
循环部分可替换如下:
while [ "$start_date" != "$end_date" ];
do
echo $start_date 'start'
bash insert_data.sh $start_date
echo $start_date 'success'
start_date=$(date +%s -d "$start_date")
start_date=$(($start_date+1*60*60))
start_date=`date "+%Y-%m-%d %H:%M:%S" -d "1970-01-01 UTC $start_date seconds"`
done
echo $end_date 'start'
bash insert_data.sh $end_date
echo $end_date 'success'
由于shell中没有小时加减的函数,因此目前采用“转化为时间戳->时间戳加减->转化为标准时间”的方式完成遍历小时的操作。
最后欢迎大家投递雷火UX设计部面向2022届毕业生的校招岗位
本文来自微信公众号“网易雷火UX用户体验中心”(ID:LeihuoUX)。大作社经授权转载,该文观点仅代表作者本人,大作社平台仅提供信息存储空间服务。