2012-02-15 23 views
9

tengo este scriptque no se encuentra al comparar cadena

#!/bin/sh   
if [ $# -ne 3 ] ; then 
      echo "param 1, param2, and A or B " 
      exit 1; 

    elif [ $# -eq 3 ]; then 
        if [$3 = "A"] ; then 
            echo "A" 
        elif [$3 = "B"]; then 
            echo "B" 
        fi 

fi 

Básicamente está comprobando si parámetro 3 es A o B, y hago eco. Pero vuelve:

./test.sh: line 6: [A: command not found 
./test.sh: line 8: [A: command not found 

He intentado utilizar -eq para la comparación, pero todavía no funciona. ¿Como puedo solucionar este problema?

+0

No necesita el 'elif [$ # -eq 3]; luego 'línea como usted sabe que' $ # 'es 3 a partir de su primera prueba. Luego, puede evitar un nivel de sangrado y un 'fi' reemplazando' si [$ 3 = "A"]; then' by 'elif [$ 3 =" A "]; entonces'. – jfg956

Respuesta

25

Estoy seguro de que esto ha aparecido antes, pero - [ es realmente un comando. Necesitas un espacio después del [ para que el shell lo encuentre.

+0

gracias, lo aceptaré después de 9 minutos (ya que el desbordamiento de pila no me permite aceptar aún) – heike

+5

La razón por la que necesita el espacio es porque el intérprete de comandos integra la línea dividiéndola donde haya uno o más espacios y/o pestañas. Si no tiene un espacio después del [entonces no es un token separado. Similar para] aunque el comando de prueba ignora ese, pero interferirá con las comparaciones si no hay espacio antes –

Cuestiones relacionadas