假设我希望bash脚本的某个块只在上午8点(8:00)到下午5点(17:00)之间执行,其他时间不执行任何操作,脚本将持续运行。到目前为止,我使用的是date命令。如何使用它来比较它的时间范围?
date
ruarlubt1#
只需检查当前时间是否在8点到5点之间--因为您使用的是整数,所以您甚至不必在分钟上浪费时间:
hour=$(date +%H) if [ "$hour" -lt 17 -a "$hour" -ge 8 ]; then # do stuff fi
当然,这在8:00:00是真的,但在5:00:00是假的;希望这不是什么大事。对于更复杂的时间范围,更简单的方法可能是转换回UNIX时间,这样可以更容易地进行比较:
begin=$(date --date="8:00" +%s) end=$(date --date="17:00" +%s) now=$(date +%s) # if you want to use a given time instead of the current time, use # $(date --date=$some_time +%s) if [ "$begin" -le "$now" -a "$now" -le "$end" ]; then # do stuff fi
当然,我犯了一个错误,回答了问题。正如seamus所建议的,您可以只使用一个cron作业-它可以在8点启动服务,在5点关闭,或者只是在预期的时间间隔运行它。
dxpyg8gm2#
为什么不直接使用cron作业呢?否则
if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then do_stuff() fi
我会做这项工作
83qze16e3#
bash比较(使用x或((x)))将由于date +%H的前导零而出错:
date +%H
((: 08: value too great for base (error token is "08")
但是,您可以通过bc将其传输以删除零:
H=`date +%H | bc` # remove leading zero if (( $H >= 8 )) && (( $H < 17 )); then do_something_amazing() fi
3条答案
按热度按时间ruarlubt1#
只需检查当前时间是否在8点到5点之间--因为您使用的是整数,所以您甚至不必在分钟上浪费时间:
当然,这在8:00:00是真的,但在5:00:00是假的;希望这不是什么大事。
对于更复杂的时间范围,更简单的方法可能是转换回UNIX时间,这样可以更容易地进行比较:
当然,我犯了一个错误,回答了问题。正如seamus所建议的,您可以只使用一个cron作业-它可以在8点启动服务,在5点关闭,或者只是在预期的时间间隔运行它。
dxpyg8gm2#
为什么不直接使用cron作业呢?
否则
我会做这项工作
83qze16e3#
bash比较(使用x或((x)))将由于
date +%H
的前导零而出错:但是,您可以通过bc将其传输以删除零: