switch sintaxis script not example bash if-statement

bash - sintaxis - shell script linux if condition



Diferencia en Bash entre declaraciones IF con paréntesis y corchetes (2)

Mientras aprendí un poco sobre bash , veo cuatro tipos de formas de trabajar con declaraciones if :

  • Paréntesis único - (...)
  • Doble paréntesis - ((...))
  • Solo soporte cuadrado - [...]
  • Doble paréntesis cuadrados [[...]]

Cuál es la diferencia entre paréntesis y corchetes en bash.


El shell solo ejecuta el comando y evalúa su código de salida. Un código de salida cero significa éxito; todos los otros valores indican falla.

if command; then : things to do if the exit code from command was 0 else : things to do if it was not 0 fi while command; do : things to do if the exit code was 0 done

El comando [ (aka test ) se usa muy comúnmente en condicionales, porque el shell Bourne original carecía de operadores incorporados para verificar si una cadena estaba vacía o si existía un archivo. Los shells modernos tienen este comando incorporado, y muchos shells tienen una versión extendida y modernizada [[ , pero esto no es apropiadamente portable para POSIX sh y por lo tanto debe evitarse para los scripts portátiles. Esta pregunta relacionada explica las diferencias entre los dos con más detalle.

La notación (( ... )) introduce un contexto aritmético. Una vez más, esto era algo que no formaba parte del shell Bourne original (tenía una expr herramienta externa dedicada para estas cosas) pero los shells modernos lo tienen incorporado. El código de resultado de una expresión aritmética es 0 si el resultado de la evaluación aritmética no fue 0 (o un error).

La notación ( command ) crea una subcadena y evalúa el command en eso. Hay situaciones en las que esto es realmente necesario y útil, pero si solo está aprendiendo la sintaxis, es poco probable que lo necesite.

... De hecho, en la mayoría de los guiones que he visto utilizar en un condicional, era claramente innecesario.

Otro antipatrio a tener en cuenta es

command if [ $? = 0 ]; then : things fi

¿Casi nunca deberías examinar $? explícitamente, y en particular, compararlo con cero es algo if y while específicamente lo hacemos para usted detrás de las escenas. Esto simplemente debe ser refactorizado para

if command; then : ...


Las pruebas que has enumerado:

  • Paréntesis único - (...) está creando una subshell
  • Doble paréntesis - ((...)) es para operación aritmética
  • Single Square Bracket - [...] es la sintaxis para la test POSIX
  • Doble paréntesis cuadrados - [[...]] es la sintaxis de las expresiones condicionales de bash (similar a la test pero más poderosa)

no son exhaustivos, puede usar lógica booleana

if command; then ...

también, porque los comandos tienen estado de salida. En bash , 0 es true y> 0 es false .

Puede ver el estado de salida de esta manera:

command echo $?

Ver :

http://wiki.bash-hackers.org/syntax/basicgrammar
http://wiki.bash-hackers.org/syntax/arith_expr
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals