tag editar easytag linux bash shell

editar - linux easytag



[: Operador inesperado en la programaciĆ³n del shell (8)

Esta pregunta ya tiene una respuesta aquí:

Mi código:

#!/bin/sh #filename:choose.sh read choose [ "$choose" == "y" -o "$choose" == "Y" ] && echo "Yes" && exit 0 [ "$choose" == "n" -o "$choose" == "N" ] && echo "No" && exit 0 echo "Wrong Input" && exit 0

Pero cuando ejecuto

sh ./choose.sh

terminal me pide que

[: 4: n: :Unexpected operator [: 5: n: :Unexpected operator

¿Hay algún error en mi script bash? ¡Gracias!


De hecho, el corchete de apertura cuadrado "[" es solo un alias de shell interno para el comando de prueba.

Entonces puedes decir:

test -f "/bin/bash" && echo "This system has a bash shell"

o

[ -f "/bin/bash" ] && echo "This system has a bash shell"

... son equivalentes en sh o bash. Tenga en cuenta el requisito de tener un corchete "]" de cierre en el comando "[", pero aparte de eso "[" es lo mismo que "prueba". "prueba de hombre" es algo bueno de leer.


En su código, reemplace esta línea:

#!/bin/sh

con

#!/bin/bash

Esta debe ser la primera línea de su script e indica qué shell de linux debe usarse. sh no admite los mismos comandos que bash.


No hay ningún error en tu script bash . Pero lo estás ejecutando con sh, que tiene una sintaxis menos extensa;)

Entonces, ejecuta bash ./choose.sh en bash ./choose.sh lugar :)


No utilice ninguna palabra clave reservada como el inicio de cualquier nombre de variable: por ejemplo, HOSTNAME fallará ya que HOST {TYPE | NAME} está reservado.


POSIX sh no comprende == para la igualdad de cadenas, ya que es un basismo. Use = lugar.

Las otras personas que dicen que los corchetes no son compatibles con sh son incorrectos, por cierto.


Para ejecutarlo con Bash, use #! / Bin / bash y chmod para que sea ejecutable, luego use

./choose.sh


puedes usar case / esac en lugar de if / else

case "$choose" in [yY]) echo "Yes" && exit;; [nN]) echo "No" && exit;; * ) echo "wrong input" && exit;; esac


tienes que usar bash en su lugar o reescribir tu script usando sh estándar

sh -c ''test "$choose" = "y" -o "$choose" = "Y"''