比较时间使用日期命令
说我想要一个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之后,或者在预期的时间间隔运行它。
为什么不使用cron作业?
否则
if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then
do_stuff()
fi
将做的工作
在这种情况下你会如何使用cron作业? – vehomzzz 2010-05-24 18:23:52
cron作业的问题在于,它会在指定的时间或指定的时间内启动作业,并且可以定期执行作业,但如果作业在一段时间结束后仍在运行,那么它就没有办法结束作业。所以,对于某些用途,日期比较方法更好。 – 2010-05-24 18:35:26
不应该这是结束= $(日期--date = “17” +%S)? – vehomzzz 2010-05-24 18:49:55
@Andrei:当然。对不起,在第一个例子中,至少...... – Cascabel 2010-05-24 19:06:23