Confrontando le stringhe per l'uguaglianza in ksh
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.
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:
-
È 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. -
Uguale nel guscio utilizza un unico
=
(non c'è modo per assegnare un valore in unif
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.