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.

Foi útil?

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:

  1. 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.

  2. Igual ao shell usa um único = (não há como atribuir um valor em um if 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top