linux - 使用 date 命令比较时间

标签 linux bash date scripting

假设我希望 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/

相关文章:

linux - 使用 imagemagick 将剪切/裁剪标记添加到 pdf

bash - 如何在 bash 中控制 IFS 分词

java - 减去两个 java.sql.timestamp 给出错误的年份

javascript - 如何使今天的日期等于特定日期?

linux - 如何将 bash 文件本身复制到输出目录

mysql - Yii2 基于 NOW() 的显示项目不显示日期本身

regex - 为什么 sed 在 linux 上提供 "invalid content"错误但在 mac 上不提供

java - 首选项系统尝试在 "normal"用户在 Linux 上没有写入权限的位置写入锁定文件

c - 如果我使用休眠模式,为什么测得的网络延迟会发生变化?

bash - 如何使用 ADF 在数据 block 中安装 jar