Domanda

sto testando con lo script di shell di seguito:

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

Si sta dando questo errore nel caso condizione:

: ==: unknown test operator

è == in realtà non la sintassi corretta da usare? Sono in esecuzione sulla riga di comando, come di seguito

test_lsn_2 INSTANCE=ALL

Chiunque poteva prega di suggerire una soluzione. Grazie.

È stato utile?

Soluzione

Vedo che si sta utilizzando ksh, ma si è aggiunto bash come un tag, accettate una risposta bash-correlate? Utilizzando bash è possibile farlo nei seguenti modi:

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

qui per maggiori informazioni su questo.

Altri suggerimenti

Per confrontare le stringhe è necessario un unico =, non una doppia. E si dovrebbe mettere tra virgolette nel caso in cui la stringa è vuota:

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

Prova

if [ "$instance" = "ALL" ]; then

Ci sono stati diversi errori:

  1. È necessario doppie virgolette la variabile per la protezione contro il caso (improbabile) che è vuota. In questo caso, il guscio vedrebbe if [ = "ALL" ]; then che non è valido.

  2. Uguale nel guscio utilizza un unico = (non c'è modo per assegnare un valore in un if nel guscio).

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

I'va già risposto a una domanda simile. In sostanza l'operatore che vi serve è = (non ==) e le pause di sintassi se la variabile è vuota (cioè diventa if [ = ALL]). Date un'occhiata al l'altra risposta per i dettagli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top