2009-11-02 18 views
6

estoy probando con el script de shell a continuación:Comparación de cadenas para la igualdad en ksh

#!/bin/ksh -x 


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

Es dar este error en el caso de condiciones:

: ==: unknown test operator 

es == realmente no la sintaxis correcta de utilizar ? estoy corriendo en la línea de comandos de la siguiente manera

test_lsn_2 INSTANCE=ALL 

Podría alguien por favor sugerir una solución. Gracias.

+1

Ponga comillas dobles alrededor de ''$ instance'' en' if' y pruébelo nuevamente. Avísame si ese trabajo. – NawaMan

+0

NO poniendo comillas dobles alrededor de '$ instance' doesnt work :( – Vijay

+0

¿Qué versión de 'ksh' era esto? –

Respuesta

5

Veo que está utilizando ksh, pero agregó bash como etiqueta, ¿acepta una respuesta relacionada con bash? usando bash puede hacerlo de las siguientes maneras:

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

Ver here para más información sobre eso.

+0

gracias por la respuesta monte. Como andre miller dijo == no está funcionando = está funcionando. Aceptaré tu respuesta pero también +1 para andre – Vijay

+0

Creo que la tercera opción no es una buena idea. AFAIK, -eq es para la comparación entera, no para cadenas. – Daniel

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

Para comparar cadenas necesita un simple =, no un doble. Y debe ponerlo entre comillas dobles en caso de que la cadena esté vacía:

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

gracias por su sugerencia – Vijay

0

Ya he respondido una pregunta similar. Básicamente, el operador que necesita es = (no ==) y la sintaxis se rompe si su variable está vacía (es decir, se convierte en if [ = ALL]). Eche un vistazo a the other answer para más detalles.

4

Trate

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

hubo varios errores:

  1. Usted necesita comillas alrededor de la variable para proteger contra el caso (poco probable) que está vacío. En este caso, el shell vería if [ = "ALL" ]; then que no es válido.

  2. Igual que en el shell usa un solo = (no hay forma de asignar un valor en if en el shell).

Cuestiones relacionadas