Estou recebendo este erro ao comparar o argumento do shell com uma string. Se o código ficar assim:
online=true
if [ "$2" -eq '-o' ]
then
online=false
fi
echo $online
Então, por exemplo, entrada, estou obtendo esses resultados:
$ ./currency.sh 2 -o
./currency.sh: line 13: [: -o: integer expression expected
true
Nesta linha:
Você usou o operador aritmético
-eq
que considera o segundo argumento como um número.Naturalmente, falha apenas por esse motivo.
Ao comparar strings, você pode usar o operador POSIX :
=
Observe que esta versão deve funcionar em todos os shells, conforme definido pelo POSIX (Portable Operating System Interface) .
Se você deseja uma versão específica do Bash :
Observe que esta versão funcionará apenas no Bash (shell Bourne-again) e similares.
Por outro lado, os colchetes duplos
[[ .. ]]
e==
o operador são definidos apenas no Bash e não funcionarão em outros shells.