Cómo probar un número menor que otro número

Cómo probar un número menor que otro número

Tengo un script que dice así:

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

Y mi problema es que a veces, incluso si el tiempo de ejecución es menor que el tiempo de espera, falla la prueba <

Aquí hay un resultado de la última ejecución:

Delay exceeded
Run_Time 4
Wait_Time 30

Respuesta1

Intente ejecutar este fragmento de código:

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

Y el resultado sería 5 is not less than 20, but why?. La respuesta es que estás usando el <operador de expresión condicional, que está documentado como:

       cadena1 < cadena2
              Verdadero si cadena1 ordena lexicográficamente antes de cadena2 en la configuración regional actual.

Y su problema es que "20" está lexicográficamente (o, básicamente, alfabéticamente) antes de "5".

Estas buscando:

if (( $Run_Time < $Wait_Time ))

en cambio, esto utiliza una evaluación aritmética y una aritmética menor que, que es lo que necesita.

información relacionada