Cómo usar HEREDOC en scripting de shell

Cómo usar HEREDOC en scripting de shell

Aquí documento (HEREDOC) es un flujo de entrada o archivo literal que se trata como un bloque especial de código. Este bloque de código se pasará a un comando para procesar. HEREDOC se origina en Desastre conchas y se pueden encontrar en conchas populares de Linux como SH, TCSH, KSH, BASH, ZSH, CSH. En particular, otros lenguajes de programación como Perl, Ruby, PHP también admiten HEREDOC.

Estructura de Herdoc

HEREDOC Utiliza 2 soportes de ángulo (<<) seguido de un token delimitador. El mismo token delimitador se utilizará para terminar el bloque de código. Lo que viene dentro del delimitador se considera un bloque de código.

Mira el ejemplo de abajo. Estoy redirigiendo el bloque de código al comando CAT. Aquí el delimitador está configurado en "BLOQUEAR"Y terminado por el mismo"BLOQUEAR".

gato << BLOQUEAR Hello World Today La fecha es $ (fecha +%f) mi directorio de inicio = $ home BLOQUEAR 

NOTA: Debe usar el mismo token delimitador para iniciar el bloque y terminar el bloque.

Crear comentarios multiline

Si está codificando en algún momento en Bash ahora, puede saber que Bash por defecto no admite comentarios multilíneas como C o Java. Puedes usar HEREDOC Para superar esto.

Esta no es una característica incorporada de Bash que admite comentarios de múltiples líneas, sino solo un truco. Si no estás redirigiendo HEREDOC a cualquier comando, el intérprete simplemente leerá el bloque del código y no ejecutará nada.

<< COMENTARIO Esta es la línea de comentarios 1 esta es la línea de comentarios 2 esta es la línea de comentarios 3 COMENTARIO 
Comentarios multiline

Manejo de espacios blancos

Por defecto, HEREDOC No suprimirá ningún personaje de espacio en blanco (pestañas, espacios). Podemos anular este comportamiento agregando estrellarse (-) después (<<) seguido de un delimitador. Esto suprimirá todos los espacios de pestaña, pero los espacios blancos no serán suprimidos.

gato <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCK 
Espacios de manejo

Sustiución variable y de comando

HEREDOC acepta sustitución variable. Las variables pueden ser variables definidas por el usuario o variables ambientales.

Hoy = $ (fecha +%f) gato << BLOCK1 # User defined variables Today date is = $TODAY #Environ Variables I am running as = $USER My home dir is = $HOME I am using $SHELL as my shell BLOCK1 

Del mismo modo, puede ejecutar cualquier comando dentro del HEREDOC bloque de código.

gato << BLOCK2 $(uname -a) BLOCK2 
Sustitución de la variable y comandos

Escapar de caracteres especiales

Hay varias formas en que podemos escapar de los caracteres especiales. O puedes hacerlo a nivel de personaje o a nivel de documento.

Para escapar de los caracteres especiales individuales, use un barra de fondo (\).

gato << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = $TODAY BLOCK5 

Para escapar de todos los caracteres especiales dentro del bloque rodean al delimitador con citas individuales, citas dobles o delimitador de prefijo con una barra insegura.

gato << 'BLOCK1' I am running as = $USER BLOCK1 cat << "BLOCK2" I am running as = $USER BLOCK2 cat << \BLOCK3 I am running as = $USER BLOCK3 
Escapar de caracteres especiales

Ahora que conocemos la estructura de HEREDOC y cómo funciona, veamos algunos ejemplos. Dos áreas comunes donde uso HEREDOC están ejecutando un bloque de comandos sobre SSH y pasando consultas SQL a través de HEREDOC.

En el siguiente ejemplo, estamos tratando de ejecutar un bloque de código en un servidor remoto a través de SSH.

Ejecutando comandos sobre SSH

En el siguiente ejemplo seleccionar afirmación a PSQL para conectarse a una base de datos y ejecutar la consulta. Esta es una forma alternativa de ejecutar una consulta en PSQL Script de Bash Inside en lugar de usar el -F bandera para correr .sql archivo.

#!/usr/bin/env Bash uname = Postgres dbname = Testing psql --username = $ uname - -password --dbname = $ dbname << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK 
Ejecutando la consulta SQL

Eso es todo para este artículo. Hay mucho más que puedes hacer con HEREDOC en comparación con lo que hemos mostrado en los ejemplos. Si tienes algún truco útil con HEREDOC Publíquelo en la sección de comentarios para que nuestros lectores puedan beneficiarse de eso.