假设我希望bash脚本的某个块仅在上午8点(8:00)和下午5点(17:00)之间执行,否则什么也不做。该脚本正在持续运行。
到目前为止,我使用的是date命令。
如何使用它与时间范围进行比较?
发布于 2010-05-25 02:07:49
只要检查一下一天中的当前小时是否在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点停止服务,或者在预期的时间运行它。
发布于 2010-05-25 02:08:01
为什么不直接使用cron作业呢?
否则
if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then
do_stuff()
fi将会完成这项工作
https://stackoverflow.com/questions/2899110
复制相似问题