Linux 使用date命令比较时间

Linux 使用date命令比较时间,linux,bash,date,scripting,Linux,Bash,Date,Scripting,假设我只希望在上午8点(8:00)到下午5点(17:00)之间执行bash脚本的某个块,否则不执行任何操作。脚本正在连续运行 到目前为止,我使用的是date命令 如何使用它与时间范围进行比较?只需检查当前一天的小时数是否在8到5之间-因为您使用的是整数,您甚至不必浪费时间: hour=$(date +%H) if [ "$hour" -lt 17 -a "$hour" -ge 8 ]; then # do stuff fi 当然,这在8:00:00是正确的,但在5:00:00是错误的;

假设我只希望在上午8点(8:00)到下午5点(17:00)之间执行bash脚本的某个块,否则不执行任何操作。脚本正在连续运行

到目前为止,我使用的是
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点关闭服务,或者只在这两个时间段之间的预期时间运行服务。

为什么不使用cron作业呢

否则

if [[ `date +%H` -ge 8 && `date +%H` -lt 17 ]];then
    do_stuff()
fi

将执行作业

在这种情况下,您将如何使用cron作业?cron作业的问题是,它将在指定的时间或期间启动作业,并且可以定期启动作业,但如果作业仍在某个时间段结束时运行,它对结束作业没有任何作用。因此,对于某些用途,日期比较法更好。这不应该是end=$(date--date=“17:00”+%s)?@Andrei:当然可以。对此很抱歉-在第一个示例中,至少是正确的。。。