在shell脚本中以HHmmss格式检查当前时间是否介于两次之间

Raj*_*gan 2 unix shell ksh

我有一个主脚本,每10分钟调用doSomeWork.sh.

但条件是doSomeWork.sh不应该在23:30:00到03:00:00之间运行.

我让我的脚本看起来像下面这样.

#!/bin/ksh
prodStartTime="030000"
prodEndTime="233000"

currentTime=`date +"%H%M%S"`
echo $prodStartTime
echo $prodEndTime
echo $currentTime
while true
do
if [[ $currentTime -ge $prodStartTime && $currentTime -le $prodEndTime ]];
then
      ./doSomeWork.sh
else
 echo Do Nothing
fi
sleep 600
done
Run Code Online (Sandbox Code Playgroud)

更新:现在我通过检查生产时间而不是夜间模式时间来查找代码(请参阅编辑历史记录).但看起来我的脚本正在考虑评价中"twalberg"所建议的八进制值.有人可以帮助我如何照顾这些价值观吗?

我只需要一种方法来确保我的脚本在指定的时间跨度之间运行.

Mar*_*eed 6

不要用数字比较它们(-ge,-le); 只是将它们比作字符串.既然ksh没有>=<=,你可以使用等价物! <! >不是.

if [[ ! "$currentTime" < "$prodStartTime" && ! "$currentTime" > "$prodEndTime" ]]; then
  ./doSomeWork.sh
fi
Run Code Online (Sandbox Code Playgroud)

但既然我们否定了,那么如果我们应用德莫根定律并且只有否定一次就更清楚了:

if [[ ! ( "$currentTime" < "$prodStartTime" || "$currentTime" > "$prodEndTime" ) ]]; then
   ./doSomeWork.sh
fi
Run Code Online (Sandbox Code Playgroud)

在任何情况下,当使用<和时>,不需要担心字符串作为数字(八进制或其他)的解释.只要所有时间都具有相同的位数,字符串比较就会产生正确的答案.