GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel Bash HereDoc avec exemples

Présentation

Un document ici (HereDoc ) est une section de code qui agit comme un fichier séparé. Un HereDoc est une chaîne multiligne ou un littéral de fichier pour envoyer des flux d'entrée à d'autres commandes et programmes.

Les HereDocs sont particulièrement utiles lors de la redirection de plusieurs commandes à la fois, ce qui permet de rendre les scripts Bash plus clairs et plus faciles à comprendre.

Cet article vous apprend les bases de l'utilisation de la notation HereDoc et quelques cas d'utilisation typiques.

Prérequis

  • Accès à la ligne de commande/au terminal en tant qu'utilisateur sudo.
  • Un éditeur de texte pour écrire des scripts Bash.
  • Commandes Linux de base. Pour une référence rapide, prenez notre aide-mémoire sur les commandes Linux.

Syntaxe Bash HereDoc

La syntaxe pour écrire un HereDoc est :

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

Il se compose des éléments suivants :

  • COMMAND est facultatif. Fonctionne pour toute commande qui accepte la redirection.
  • << est l'opérateur de redirection pour transmettre un HereDoc à la COMMAND .
  • - est un paramètre de suppression de tabulation.
  • DELIMITER dans la première ligne définit un jeton de délimiteur HereDoc. END , EOT , et EOF sont les plus courants, mais tout mot à plusieurs caractères qui n'apparaîtra pas dans le corps fonctionne. Omettez les guillemets simples sur la première ligne pour permettre l'expansion des commandes et des variables.
  • Le DELIMITER dans la dernière ligne indique la fin d'un HereDoc. Utilisez le même mot de la première ligne sans les espaces de début.

Le HereDoc lui-même contient n'importe quel nombre de lignes avec des chaînes, des variables, des commandes et d'autres entrées.

Exemples de Bash HereDoc

Cette section montre comment utiliser la notation HereDoc dans diverses situations. Le cas d'utilisation le plus courant est la commande cat.

Chaîne multiligne

Ouvrez le terminal et saisissez le texte suivant en appuyant sur Entrée après chaque ligne :

cat << EOF
Hello
World
EOF

Le cat commande lit le HereDoc et écrit le contenu sur le terminal.

Extension variable

Un HereDoc accepte l'utilisation de variables et les lit.

Pour voir comment cela fonctionne, créez deux variables dans le terminal :

var1="Hello"
var2="World"

Transmettez le HereDoc à un cat commande pour imprimer les deux variables avec une variable d'environnement :

cat << END
$var1
$var2
$PWD
END

Toutes les variables se développent et leurs valeurs respectives s'impriment sur le terminal.

Extension des commandes

HereDocs accepte la substitution de commande. Exécutez le code suivant dans le terminal ligne par ligne pour voir les résultats :

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

Encadrez chaque commande dans $() pour évaluer une instruction et récupérer les résultats. Omission de $() traite le texte comme une chaîne.

Ignorer l'expansion des variables et des commandes

Ajoutez des guillemets simples ou doubles au premier délimiteur pour ignorer l'expansion des variables et des commandes dans un HereDoc.

Par exemple :

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

L'ajout de guillemets au délimiteur traite le contenu comme un littéral HereDoc.

Canalisation et redirection

Utilisez la canalisation ou la redirection pour transmettre les résultats de la commande à une autre commande. Par exemple, créez un script Bash et ajoutez le contenu suivant pour diriger une commande :

#!/bin/bash

cat << EOF | base64 -d
SGVsbG8KV29ybGQK
EOF

Vous pouvez également utiliser la notation de redirection pour obtenir le même résultat :

#!/bin/bash

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

Exécutez le script Bash pour voir les résultats.

Dans les deux cas, la sortie du cat et une commande HereDoc conduit (ou redirige) vers le base64 -d commande. En conséquence, le script décode le message du HereDoc.

Écrire dans un fichier

HereDoc permet d'écrire des documents multilignes via une seule commande.

Pour créer un fichier et enregistrer le contenu HereDoc, utilisez le format suivant :

cat << EOF > hello_world.txt
Hello
World
EOF

Si le document n'existe pas, la commande le crée. Vérifiez le contenu du fichier pour confirmer :

cat hello_world.txt

La console affiche le contenu du fichier.

Suppression des tabulations

Ajoutez un tiret (- ) après la redirection pour supprimer les tabulations principales. Par exemple, créez et exécutez le script suivant :

#!/bin/bash

cat <<- EOF
        Hello
        World
EOF

Sans suppression de tabulation, le message s'imprime sur la console avec une indentation. L'ajout du tiret supprime le retrait de tabulation et affiche le message sans les espaces de début.

Instructions et boucles internes

Lorsque vous travaillez avec des instructions et des boucles internes HereDoc, gardez à l'esprit le comportement suivant :

  • Code à l'intérieur des instructions et des boucles est en retrait. Ajoutez un tiret après l'opérateur de redirection pour imprimer les messages d'un HereDoc sans indentation.
  • Le délimiteur de fin ne peut pas être précédé d'espaces ou d'indentations.

Essayez l'exemple de code suivant pour voir comment utiliser un HereDoc dans une instruction if :

#!/bin/bash

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

Le tiret garantit que les retraits n'apparaissent pas lorsque le programme s'exécute. Le délimiteur de fin n'est pas en retrait et l'ajout d'espaces provoque une erreur.

Commentaires multilignes

Un HereDoc avec la commande null (: ) crée l'effet des commentaires de bloc dans les scripts Bash.

Par exemple :

#!/bin/bash

: << 'END'
This is a comment
END

L'utilisation de la notation HereDoc comme commentaire de bloc n'est pas conventionnelle. En général, Bash ne prend pas en charge les commentaires de bloc.

Caractères d'échappement

Pour éviter l'interprétation des caractères, ajoutez une barre oblique inverse (\ ) avant un caractère :

cat << EOF
\$100
EOF

Sinon, évitez complètement l'interprétation des caractères en échappant le délimiteur :

cat << \EOF
$100
EOF

L'utilisation de guillemets sur le délimiteur est équivalente dans ce cas.

Fonctions

Ajoutez des paramètres à une fonction en transmettant des informations via un HereDoc. Par exemple, créez une fonction pour lire les lignes et ajouter des informations via le HereDoc :

#!/bin/bash

readLines(){
        read greeting
        read name
}

readLines << EOF
Hello
$USER
EOF

echo $greeting
echo $name

La fonction stocke les informations fournies par le HereDoc dans des variables.

Exécutez le script pour imprimer les valeurs des variables sur le terminal.

HereDoc et SSH

Un HereDoc est pratique pour exécuter plusieurs commandes sur une machine distante. Transmettez un HereDoc à la connexion SSH pour exécuter plusieurs commandes.

Par exemple :

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

La commande imprime les utilisateurs locaux et distants sur la console.

HereDoc et SFTP

SFTP permet de transférer des données en toute sécurité via le protocole SSH. Transférez un HereDoc pour exécuter automatiquement plusieurs commandes SFTP :

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

Le code télécharge un exemple de fichier sur la machine distante.


Linux
  1. Commande Nohup avec exemples

  2. Tutoriel vim avec des exemples de commandes

  3. Tutoriel sur l'état de sortie de Bash Shell avec des exemples pratiques

  4. Le tutoriel Ultimate Bash Array avec 15 exemples

  5. Tutoriel de commande cURL avec exemples

Tutoriel de commande Linux tr pour les débutants (avec exemples)

15 Commande Linux ps avec exemples

Le didacticiel de commande fc avec des exemples pour les débutants

La commande Bash Echo expliquée avec des exemples sous Linux

Bash Scripting - Commande Printf expliquée avec des exemples

Tutoriel sur la commande de recherche Linux (avec exemples)