Pregunta

Estoy probando con el script de shell a continuación:

#!/bin/ksh -x


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

Está dando este error en la condición IF:

: ==: unknown test operator

es == ¿Realmente no es la sintaxis correcta para usar? Me estoy ejecutando en la línea de comando como se muestra a continuación

test_lsn_2 INSTANCE=ALL

¿Alguien podría sugerir una solución? Gracias.

¿Fue útil?

Solución

Veo que estás usando KSH, pero agregaste bash como etiqueta, ¿aceptas una respuesta relacionada con BASH? Usando Bash, puede hacerlo de esta manera:

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

Ver aquí Para más información sobre eso.

Otros consejos

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

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

Probar

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

Hubo varios errores:

  1. Necesita citas dobles alrededor de la variable para proteger contra el caso (poco probable) de que esté vacío. En este caso, el caparazón vería if [ = "ALL" ]; then que no es válido.

  2. Iguales en el shell usa un solo = (no hay forma de asignar un valor en un if en el caparazón).

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

Ya respondió una pregunta similar. Básicamente el operador que necesita es = (no ==) y la sintaxis se rompe si tu variable está vacía (es decir, se convierte en if [ = ALL]). Mira esto la otra respuesta para detalles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top