比较时间的好方法?

比较时间的好方法?

我需要检查当前时间,如果不是我应该运行它的正确时间,则中止脚本。另外,如果其他人运行它,它应该中止。

例如:我需要我的脚本仅在晚上 10 点到凌晨 2 点(4 小时窗口)之间启动时运行。

目前我正在做以下事情。花时间与date +%k%M硬编码数字进行比较

#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
    tempTime=$1
    if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then 
        echo "Time is between 2 AM and 10 PM. Aborting."
        exit 1
    else
        echo "Time is after 10 PM and before 2 AM. Running normally."
    fi
}

check_time_to_run $currentTime

我想知道是否有其他有效的方法来进行shor的时间比较bash

答案1

这对我来说看起来很完美。是什么让您认为应该改进?

无论如何,改进的方法可能是:

  • 使用比 bash 更小、更快的 shell,例如 dash 或 pdksh。
  • 使用具有内置日期功能的 shell,例如zshksh93
  • use gawk(比 bash 小,但比 dash 小,但可以避免额外的 fork):

例子:

#! /usr/bin/gawk -f
BEGIN {now = strftime("%k%M")+0; exit(now > 200 && now < 2200)}

答案2

如果允许使用外部工具,您可能需要检查dateutils

你的“脚本”变成:

if dtest time --gt '02:00:00' && dtest time --lt '22:00:00'; then
    echo "Time is between 2 AM and 10 PM. Aborting."
fi

免责声明:我是该工具的作者。

相关内容