Comparando strings para a igualdade em KSH
Pergunta
Estou testando com o script do shell abaixo:
#!/bin/ksh -x
instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi
Está dando esse erro na condição IF:
: ==: unknown test operator
é ==
Realmente não é a sintaxe correta para usar? Estou correndo na linha de comando como abaixo
test_lsn_2 INSTANCE=ALL
Alguém poderia sugerir uma solução. Obrigado.
Solução
Vejo que você está usando o KSH, mas você adicionou Bash como uma tag, você aceita uma resposta relacionada ao Bash? Usando o Bash, você pode fazer isso dessa maneira:
if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]
Ver aqui Para mais informações sobre isso.
Outras dicas
Para comparar strings, você precisa de um único = não um dobro. E você deve colocá -lo em citações duplas, caso a string esteja vazia:
if [ "$instance" = "ALL" ]
then
echo "strings matched \n"
fi
Tentar
if [ "$instance" = "ALL" ]; then
Houve vários erros:
Você precisa de citações duplas em torno da variável para proteger contra o caso (improvável) de que ela está vazia. Nesse caso, a concha veria
if [ = "ALL" ]; then
o que não é válido.Igual ao shell usa um único
=
(não há como atribuir um valor em umif
na concha).
totest=$1
case "$totest" in
"ALL" ) echo "ok" ;;
* ) echo "not ok" ;;
esac
Eu já respondi uma pergunta semelhante. Basicamente, o operador que você precisa é =
(não ==
) e a sintaxe quebra se sua variável estiver vazia (ou seja, ela se torna if [ = ALL]
). Dê uma olhada em a outra resposta para detalhes.