Como testar números menores que outros números

2

Eu tenho um script que é assim:

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

E meu problema é que, às vezes, mesmo que o tempo de execução seja menor que o tempo de espera, o < teste

Aqui está uma saída da última execução:

Delay exceeded
Run_Time 4
Wait_Time 30
    
por TCZ8 23.06.2014 / 21:09

1 resposta

12

Tente executar este snippet de código:

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

E a saída seria 5 is not less than 20, but why? . A resposta é que você está usando o operador de expressão condicional < , que está documentado como:

       string1 < string2
              True if string1 sorts before string2 lexicographically in the current locale.

E o seu problema é que "20" é lexicograficamente (ou, basicamente, alfabeticamente) antes de "5".

Você está procurando:

if (( $Run_Time < $Wait_Time ))

em vez disso - isso usa avaliação aritmética e uma aritmética menor que, que é o que você precisa.

    
por 23.06.2014 / 21:19