Shell-Script

如何測試小於其他數字的數字

  • December 19, 2016

我有一個這樣的腳本:

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

我的問題是,有時即使執行時間小於等待時間,它也會失敗 < 測試

這是上次執行的輸出:

Delay exceeded
Run_Time 4
Wait_Time 30

嘗試執行此程式碼段:

if [[ 5 &lt; 20 ]]
then
   echo "5 &lt; 20, as expected"
else
   echo "5 is not less than 20, but why?"
fi

輸出將是5 is not less than 20, but why?. 答案是您正在使用&lt;條件表達式運算符,記錄為:

字元串 1 &lt; 字元串 2
如果 string1 在目前語言環境中按字典順序在 string2 之前排序,則為真。

你的問題是“20”在“5”之前按字典順序(或基本上按字母順序)。

您正在尋找:

if (( $Run_Time &lt; $Wait_Time ))

相反 - 這使用算術評估和算術小於,這是你需要的。

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