Bash

比較時間的好方法?

  • November 26, 2015

我需要檢查目前時間併中止腳本,如果它不是我應該執行它的正確時間。此外,如果其他人執行它,它應該中止。

例如:我需要我的腳本僅在晚上 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方法bash

這對我來說看起來很完美。是什麼讓您認為它應該改進?

無論如何,改進它的方法可能是:

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

例子:

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

如果允許使用外部工具,您可能需要檢查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

免責聲明:我是該工具的作者。

引用自:https://unix.stackexchange.com/questions/63636