如何测试小于其他数字的数字

TCZ*_*CZ8 2 scripting shell-script date timestamps

我有一个像这样的脚本:

while :
do
   Start_Time=$(date +"%s")

      MAIN PROGRAM GOES HERE (CROPPED TO SHORTEN THINGS)

   Run_Time=$(( $(date +"%s") - $Start_Time ))

   if [[ $Run_Time < $Wait_Time ]]
   then
      Delay_Time=$(( $Wait_Time - $Run_Time ))
      sleep $Delay_Time
   else
      echo "Delay exceeded" 
      echo $Run_Time
      echo $Wait_Time
   fi
done
Run Code Online (Sandbox Code Playgroud)

我的问题是,有时即使运行时间小于等待时间,它也会失败 < 测试

这是上次运行的输出:

Delay exceeded
Run_Time 4
Wait_Time 30
Run Code Online (Sandbox Code Playgroud)

god*_*eek 12

尝试运行此代码片段:

if [[ 5 < 20 ]]
then
    echo "5 < 20, as expected"
else
    echo "5 is not less than 20, but why?"
fi
Run Code Online (Sandbox Code Playgroud)

输出将是5 is not less than 20, but why?. 答案是您正在使用<条件表达式运算符,记录为:

       字符串 1 < 字符串 2
              如果 string1 在当前语言环境中按字典顺序排列在 string2 之前,则为 True。

你的问题是“20”在“5”之前按字典顺序(或基本上按字母顺序)。

您正在寻找:

if (( $Run_Time < $Wait_Time ))
Run Code Online (Sandbox Code Playgroud)

相反 - 这使用算术评估和算术小于,这正是您所需要的。

  • +1 您也可以使用 `-lt` 代替 `&lt;`;前者专门用于整数比较,因此可以在 `[]` 中使用。 (5认同)