Assim você está fazendo comparação de strings, até funciona, mas se a intenção é fazer comparação aritmética use "-eq" ou -- no bash e alguns outros shells -- "((" no lugar do test.
Está certo, eu até concordo contigo, mas....
Quando possível, usar o
igual (=) e
diferente (!=) no lugar de
não equivalente (-ne) e
equivalente (-eq) evita ter de tratar msg de erro na tela se o valor da variável é um valor
não numérico:
Ex1: read -p "valor=> " valor; if [ $valor
= 1 ]; then echo "valor = $valor"; else echo "valor # $valor"; fi
Ex2: read -p "valor=> " valor; if [ $valor
!= 1 ]; then echo "valor = $valor"; else echo "valor # $valor"; fi
Com o igual (=) e diferente (!=), não tenho msg de erro ao inserir uma letra ou simbolo, etc...
Ex3: read -p "valor=> " valor; if [ $valor
-ne 1 ]; then echo "valor = $valor"; else echo "valor # $valor"; fi
Ex4: read -p "valor=> " valor; if [ $valor
-eq 1 ]; then echo "valor = $valor"; else echo "valor # $valor"; fi
Se eu insiro um um valor não numérico, como a letra "K" ou o simbolo *, e estou usando não equivalente (-ne) ou equivalente (-eq), tenho de tratar o erro:
bash: [: k: esperado expressão de número inteirobash: [: *: esperado expressão de número inteiro-ne e -eq exigem que a variável seja numérica, mas se letras ou caracteres forem informadas, tem-se erro na condição.
Nem sempre queremos cairo no else é ai que a coisa pode se complicar e uma ação não desejada ser executada por erro humano.
Por isso, quando os valores são inseridos pelo teclado, tento não utilizar -eq e -ne, tento utiliza-los apenas quando sei que o valor da variável será numérica, ou seja, um valor buscado ou recebido automaticamente pela máquina, sem intervenção humana. Do contrario, vale mais o case ou o = e !=
É isso ou mais um if com a expressão [[ $1 = ?(+|-)+([0-9]) ]][/b] para validar a variável e tratar informações inseridas incorretamente.