使用date命令比较时间

假设我想要一个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 

会做这项工作