GNU/Linux >> Tutoriales Linux >  >> Linux

Tutorial de Bash HereDoc con ejemplos

Introducción

Un documento aquí (HereDoc ) es una sección de código que actúa como un archivo separado. Un HereDoc es una cadena de varias líneas o un archivo literal para enviar flujos de entrada a otros comandos y programas.

HereDocs es especialmente útil cuando se redireccionan varios comandos a la vez, lo que ayuda a que los scripts de Bash sean más claros y fáciles de entender.

Este artículo le enseña los conceptos básicos del uso de la notación HereDoc y algunos casos de uso típicos.

Requisitos previos

  • Acceso a la línea de comandos/terminal como usuario sudo.
  • Un editor de texto para escribir scripts Bash.
  • Comandos básicos de Linux. Para obtener una referencia rápida, obtenga nuestra hoja de trucos de comandos de Linux.

Sintaxis de Bash HereDoc

La sintaxis para escribir un HereDoc es:

[COMMAND] <<[-] 'DELIMITER'
  Line 1
  Line 2
  ...
DELIMITER

Consta de los siguientes elementos:

  • COMMAND es opcional. Funciona para cualquier comando que acepte la redirección.
  • << es el operador de redirección para reenviar un HereDoc al COMMAND .
  • - es un parámetro para la supresión de pestañas.
  • DELIMITER en la primera línea define un token delimitador HereDoc. END , EOT y EOF son los más comunes, pero cualquier palabra de varios caracteres que no aparecerá en el cuerpo funciona. Omita las comillas simples en la primera línea para permitir la expansión de comandos y variables.
  • El DELIMITER en la última línea indica el final de un HereDoc. Utilice la misma palabra de la primera línea sin los espacios en blanco iniciales.

El HereDoc en sí contiene cualquier cantidad de líneas con cadenas, variables, comandos y otras entradas.

Ejemplos de Bash HereDoc

Esta sección muestra cómo usar la notación HereDoc en varias situaciones. El caso de uso más común es con el comando cat.

Cadena de varias líneas

Abre la terminal e ingresa el siguiente texto, presionando Enter después de cada línea:

cat << EOF
Hello
World
EOF

El cat El comando lee HereDoc y escribe el contenido en la terminal.

Expansión de variables

Un HereDoc acepta el uso de variables y las lee.

Para ver cómo funciona esto, crea dos variables en la terminal:

var1="Hello"
var2="World"

Pase el HereDoc a un cat comando para imprimir las dos variables junto con una variable de entorno:

cat << END
$var1
$var2
$PWD
END

Todas las variables se expanden y sus respectivos valores se imprimen en la terminal.

Expansión de comandos

HereDocs acepta la sustitución de comandos. Ejecute el siguiente código en la terminal línea por línea para ver los resultados:

cat << EOF
$(echo Hello)
$(whoami)
EOF

Abarque cada comando en $() para evaluar una sentencia y obtener los resultados. Omitir $() trata el texto como una cadena.

Ignorar expansión de variables y comandos

Agregue comillas simples o dobles al primer delimitador para ignorar la expansión de variables y comandos en un HereDoc.

Por ejemplo:

cat << "EOF"
$(echo Hello)
$(whoami)
$PWD
EOF

Agregar comillas al delimitador trata el contenido como un literal de HereDoc.

Conexión y redirección

Use tuberías o redirección para reenviar los resultados del comando a otro comando. Por ejemplo, cree un script Bash y agregue los siguientes contenidos para canalizar un comando:

#!/bin/bash

cat << EOF | base64 -d
SGVsbG8KV29ybGQK
EOF

Alternativamente, use la notación de redirección para lograr el mismo resultado:

#!/bin/bash

(base64 -d) < cat << EOF
SGVsbG8KV29ybGQK
EOF

Ejecute el script Bash para ver los resultados.

En ambos casos, la salida del cat y un comando HereDoc canaliza (o redirige) a base64 -d dominio. Como resultado, el script decodifica el mensaje de HereDoc.

Escribir en archivo

HereDoc permite escribir documentos de varias líneas a través de un comando.

Para crear un archivo y guardar el contenido de HereDoc, use el siguiente formato:

cat << EOF > hello_world.txt
Hello
World
EOF

Si el documento no existe, el comando lo crea. Verifique el contenido del archivo para confirmar:

cat hello_world.txt

La consola muestra el contenido del archivo.

Supresión de pestañas

Agregue un guión (- ) después de la redirección para suprimir las pestañas iniciales. Por ejemplo, cree y ejecute el siguiente script:

#!/bin/bash

cat <<- EOF
        Hello
        World
EOF

Sin supresión de tabulación, el mensaje se imprime en la consola con sangría. Agregar el guión elimina la sangría de tabulación y genera el mensaje sin los espacios iniciales.

Declaraciones internas y bucles

Cuando trabaje con un HereDoc dentro de sentencias y bucles, tenga en cuenta el siguiente comportamiento:

  • Código dentro de sentencias y bucles está sangrado. Agregue un guión después del operador de redirección para imprimir mensajes de un HereDoc sin sangría.
  • El delimitador final no puede tener espacios ni sangrías antes.

Pruebe el siguiente código de ejemplo para ver cómo usar un HereDoc dentro de una declaración if:

#!/bin/bash

if true;
then
        cat <<- "END"
        Hello
        World
END
fi

El guión asegura que las sangrías no se muestren cuando se ejecuta el programa. El delimitador final no tiene sangría y agregar espacios provoca un error.

Comentarios de varias líneas

Un HereDoc con el comando null (:) ) crea el efecto de bloquear comentarios en scripts de Bash.

Por ejemplo:

#!/bin/bash

: << 'END'
This is a comment
END

El uso de la notación HereDoc como un comentario de bloque no es convencional. En general, Bash no admite comentarios en bloque.

Personajes de escape

Para evitar la interpretación de caracteres, agregue una barra invertida (\ ) antes de un caracter:

cat << EOF
\$100
EOF

Alternativamente, evite la interpretación de caracteres por completo escapando del delimitador:

cat << \EOF
$100
EOF

Usar comillas en el delimitador es equivalente en este caso.

Funciones

Agregue parámetros a una función enviando información a través de HereDoc. Por ejemplo, cree una función para leer líneas y agregar información a través de HereDoc:

#!/bin/bash

readLines(){
        read greeting
        read name
}

readLines << EOF
Hello
$USER
EOF

echo $greeting
echo $name

La función almacena la información proporcionada por HereDoc en variables.

Ejecute el script para imprimir los valores de las variables en el terminal.

HereDoc y SSH

Un HereDoc es conveniente para ejecutar múltiples comandos en una máquina remota. Pase un HereDoc a la conexión SSH para ejecutar varios comandos.

Por ejemplo:

ssh [email protected] << EOF
echo "Local user: $USER"
echo "Remote user: \$USER"
EOF

El comando imprime los usuarios locales y remotos en la consola.

HereDoc y SFTP

SFTP ayuda a transferir datos de forma segura a través del protocolo SSH. Reenvíe un HereDoc para ejecutar varios comandos SFTP automáticamente:

sftp [email protected] << EOF
put test.sh
EOF

El código carga un archivo de muestra en la máquina remota.


Linux
  1. vim Tutorial con ejemplos de comandos

  2. Tutorial de estado de salida de Bash Shell con ejemplos prácticos

  3. El último tutorial de Bash Array con 15 ejemplos

  4. Tutorial de comando cURL con ejemplos

  5. '&&' vs. '&' con el comando 'test' en Bash

Tutorial de comando Linux tr para principiantes (con ejemplos)

15 comandos ps de Linux con ejemplos

El tutorial del comando fc con ejemplos para principiantes

Comando Bash Echo explicado con ejemplos en Linux

Bash Scripting - Comando Printf explicado con ejemplos

Tutorial de comando de búsqueda de Linux (con ejemplos)