比较时间使用日期命令

问题描述:

说我想要一个bash脚本的某个块,只有在上午8点(8:00)和下午5点(17:00)之间执行,否则什么也不做。脚本不断运行。比较时间使用日期命令

到目前为止,我正在使用date命令。

如何使用它来比较它的时间范围?

只是检查当天的当前时间是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 

当然,我已经回答了一个问题,问的错误。正如巨人所暗示的那样,你可以使用一个cron工作 - 它可以在8开始服务,并且在5之后,或者在预期的时间间隔运行它。

+0

不应该这是结束= $(日期--date = “17” +%S)? – vehomzzz 2010-05-24 18:49:55

+0

@Andrei:当然。对不起,在第一个例子中,至少...... – Cascabel 2010-05-24 19:06:23

为什么不使用cron作业?

否则

if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then 
    do_stuff() 
fi 

将做的工作

+0

在这种情况下你会如何使用cron作业? – vehomzzz 2010-05-24 18:23:52

+0

cron作业的问题在于,它会在指定的时间或指定的时间内启动作业,并且可以定期执行作业,但如果作业在一段时间结束后仍在运行,那么它就没有办法结束作业。所以,对于某些用途,日期比较方法更好。 – 2010-05-24 18:35:26