假设我只想在上午8点(8点)到下午5点(17点)之间执行某个bash脚本块,否则不执行任何操作。该脚本不断运行。
到目前为止,我正在使用date
命令。
如何使用它将它与时间范围进行比较?
答案 0 :(得分:11)
只需检查当天的当前时间是否在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处将其降低,或者只是在预期的时间间隔运行它。
答案 1 :(得分:1)
为什么不使用cron作业?
否则
if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then
do_stuff()
fi
将完成这项工作