GNU/Linux >> Tutoriales Linux >  >> Linux

¿Mecanismo de bloques de declaraciones en secuencias de comandos de Shell?

En Principios de la programación de Linux libro. Hay una sección sobre Bloqueo de declaraciones . En esa Porción, la explicación es similar a la siguiente.

Bloques de declaraciones

Si desea utilizar varias declaraciones en un lugar donde solo se permite una, como en una lista AND u OR,
puede hacerlo encerrándolas entre llaves {} para crear un bloque de declaraciones. Por ejemplo, vea el siguiente código:

get_confirm && {
    grep −v "$cdcatnum" $tracks_file > $temp_file 
    cat $temp_file > $tracks_file
    echo
    add_record_tracks
}

Explique cómo se ejecuta el código en el bloque de instrucciones...

Respuesta aceptada:

El código dentro de { ... } ejecutar exactamente de la forma en que se habría ejecutado sin las llaves, excepto que ahora depende del estado de salida de get_confirm .

Si get_confirm sale con un estado de salida cero ("éxito"), el bloque se ejecuta, de lo contrario no.

Es equivalente a

if get_confirm; then
    # the contents of the block goes here
fi

(que creo que se ve mejor)

En mi humilde opinión, el ejemplo del libro no es un buen ejemplo de un uso común de { ... } . Un mejor ejemplo hubiera sido

{ echo 'hello world'; date; } >file

que utiliza una sola redirección para redirigir la salida estándar de ambos comandos en el { ... } bloque al mismo archivo.

Esto es similar a (y tiene el mismo efecto, en este caso, que)

( echo 'hello world'; date ) >file

pero las declaraciones dentro de { ... } se ejecuta en el mismo entorno que el shell, mientras que las sentencias en ( ... ) se ejecuta en una subcapa (un entorno separado).

Puedes ver la diferencia con

{ a=42; }; echo $a

y

( a=1973 ); echo $a

El primero generará 42 mientras que el segundo no generará 1973 (la asignación ocurre en una subcapa y no puede afectar el entorno exterior).

Aviso sobre gramática:el } de cierre de un { ... } el bloque debe seguir una nueva línea o un ; . { echo 'hello' } no es válido, mientras que ambos { echo 'hello'; } y

{ 
    echo 'hello'
}

son.


Linux
  1. ¿Descriptores de archivos y secuencias de comandos de Shell?

  2. ¿Mostrar contenido de mayor valor en Shell Scripting?

  3. Cómo comparar cadenas en Bash Shell Scripting

  4. Símbolo de acento grave (`) en Linux Shell Scripting

  5. Scripting de shell de Linux:número hexadecimal a cadena binaria

Shell Scripting Parte I:Primeros pasos con bash scripting

Shell Scripting Parte 4:Estructuras de control de repetición

Bash Scripting – Declaración de caso

¿Qué es Shebang en Linux Shell Scripting?

Shell Scripting Parte 4:entrada, salida y redirección

Tutorial paso a paso de secuencias de comandos de Shell