我需要检查当前时间,如果不是我应该运行它的正确时间,则中止脚本。另外,如果其他人运行它,它应该中止。
例如:我需要我的脚本仅在晚上 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
我想知道是否有其他有效的方法来进行sh
or的时间比较bash
?
答案1
这对我来说看起来很完美。是什么让您认为应该改进?
无论如何,改进的方法可能是:
- 使用比 bash 更小、更快的 shell,例如 dash 或 pdksh。
- 使用具有内置日期功能的 shell,例如
zsh
或ksh93
- 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
免责声明:我是该工具的作者。