Comparación de cuerdas para la igualdad en KSH
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.
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:
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.Iguales en el shell usa un solo
=
(no hay forma de asignar un valor en unif
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.