como faço para comparar valores no bash?

2

Estou tentando escrever uma página da Web simples em um pi de framboesa com o Ubuntu Mate 16.04.

Há algo errado com essas comparações, para onde o ctemp é 31, ou qualquer outra temperatura, recebo a mensagem "Não tenho idéia de qual é a temperatura".

Acho que minhas comparações estão erradas, mas não consigo descobrir como obter uma comparação adequada.

   #!/bin/bash
echo "<html><body>"
#get temp too and show in images
sensor='/opt/vc/bin/vcgencmd measure_temp | sed "s/[^0-9]//g"'
#sensor is 10 times higher than actual Core temp.
ctemp=$((sensor/10))
echo "Core Temp: " $ctemp

if [ "$ctemp" >= "20" ] && [ "$ctemp" < "38" ];then   
    echo "<img src=\"cool.png\" alt=\"cool\">"
elif [ "$ctemp" >= "38" ] && [ "$ctemp" < "50" ];then
     echo "<img src=\"mid.png\" alt=\"Normal Operational Temprature\"><br>"

elif [ "$ctemp" >= "50" ];then
     echo "<img src=\"hot.png\" alt=\"Hot\">"
else
     echo "<br>I have no clue what temprature it is<br>"
fi
    
por j0h 25.09.2016 / 16:51

1 resposta

3

De man bash :

 string1 == string2
   string1 = string2
          True  if  the strings are equal.  = should be used with the test
          command for POSIX conformance.  When used with the  [[  command,
          this  performs  pattern  matching  as  described above (Compound
          Commands).

   string1 != string2
          True if the strings are not equal.

   string1 < string2
          True if string1 sorts before string2 lexicographically.

   string1 > string2
          True if string1 sorts after string2 lexicographically.

   arg1 OP arg2
          OP is one of -eq, -ne, -lt, -le, -gt, or -ge.  These  arithmetic
          binary  operators return true if arg1 is equal to, not equal to,
          less than, less than or equal to, greater than, or greater  than
          or  equal  to arg2, respectively.  Arg1 and arg2 may be positive
          or negative integers.

Portanto, em vez de comparar com >= e < (comparação de string), use -ge e -lt (comparação numérica).

    
por waltinator 25.09.2016 / 17:15