Shell-Script
如何測試小於其他數字的數字
我有一個這樣的腳本:
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 < 20 ]] then echo "5 < 20, as expected" else echo "5 is not less than 20, but why?" fi
輸出將是
5 is not less than 20, but why?
. 答案是您正在使用<
條件表達式運算符,記錄為:字元串 1 < 字元串 2 如果 string1 在目前語言環境中按字典順序在 string2 之前排序,則為真。
你的問題是“20”在“5”之前按字典順序(或基本上按字母順序)。
您正在尋找:
if (( $Run_Time < $Wait_Time ))
相反 - 這使用算術評估和算術小於,這是你需要的。