假设我希望 bash 脚本的某个 block 仅在上午 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
当然,我犯了按要求回答问题的错误。正如 seamus 所建议的那样,您可以只使用 cron 作业 - 它可以在 8 点启动服务并在 5 点将其关闭,或者只是在预期的时间运行它。
关于linux - 使用 date 命令比较时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899110/