Как проверить число, которое меньше другого числа

Как проверить число, которое меньше другого числа

У меня есть такой сценарий:

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 в текущей локали.

А ваша проблема в том, что «20» лексикографически (или, по сути, в алфавитном порядке) стоит перед «5».

Вы ищете:

if (( $Run_Time < $Wait_Time ))

вместо этого здесь используется арифметическая оценка и арифметическое «меньше», что вам и нужно.

Связанный контент