他の数字より小さい数字をテストする方法

他の数字より小さい数字をテストする方法

次のスクリプトがあります。

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

答え1

次のコードを実行してみてください。

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の前にある場合はtrueです。

問題は、アルファベット順に「20」が「5」の前に出てくるということです。

あなたが探している:

if (( $Run_Time < $Wait_Time ))

代わりに、これは算術評価と算術lessを使用します。これがまさにあなたに必要なものです。

関連情報