2009-11-02 16 views
6

sto testando con lo script di shell di seguito:Confronto tra stringhe per l'uguaglianza in ksh

#!/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 utilizzare ? Sono in esecuzione sulla riga di comando, come di seguito

test_lsn_2 INSTANCE=ALL 

Qualcuno potrebbe si prega di suggerire una soluzione. Grazie.

+1

Inserisci le virgolette attorno a "$ instance" in "if" e riprovare. Fammi sapere se funziona. – NawaMan

+0

NO inserendo virgolette attorno a '$ istanza' non funziona :( – Vijay

+0

Quale versione di 'ksh' era questa? –

risposta

5

Vedo che stai usando ksh, ma hai aggiunto bash come tag, accetti una risposta relativa alla bash? Utilizzando bash si può fare in questi modi:

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

Vedi here per maggiori informazioni su questo.

+0

grazie per la risposta monte.come andre miller ha detto == non funziona = sta funzionando.io accetterò risposta ma anche +1 per andre – Vijay

+0

Penso che la terza opzione non sia una buona idea. AFAIK, -eq è per il confronto tra interi, non per le stringhe. – Daniel

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

Per confrontare le stringhe è necessario un singolo =, non un doppio. E dovresti metterlo tra virgolette nel caso in cui la stringa sia vuota:

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

grazie andre per il tuo suggerimento – Vijay

0

Ho già risposto a una domanda simile. Fondamentalmente l'operatore di cui hai bisogno è = (non ==) e la sintassi interrompe se la tua variabile è vuota (cioè diventa if [ = ALL]). Date un'occhiata a the other answer per i dettagli.

4

Prova

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

C'erano diversi errori:

  1. avete bisogno di doppio virgolette la variabile per la protezione contro il caso (improbabile) che è vuota. In questo caso, la shell vedrebbe if [ = "ALL" ]; then che non è valida.

  2. Uguale nella shell utilizza un singolo = (non è possibile assegnare un valore in uno if nella shell).