Bash : utiliser la syntaxe Heredoc
Petites explications sur Heredoc
La syntaxe Heredoc, pour l'anglicisme "Here Documents", est un bloc de code, cela peut être un bloc de commandes systèmes, mais nous l'utiliserons principalement comme un bloc de texte ...
La syntaxe Heredoc s'utilise généralement, en Bash, avec des commandes systèmes, tels que ftp, cat, etc... voire tout programme interactif !
Usage de Heredoc
Au lieu de taper un bloc de texte comportant plusieurs lignes de la manière suivante :
echo "Voici mon menu :"
echo " [1] Utiliser ftp"
echo " [2] Utiliser vi"
echo " [3] Sauvegarder"
echo "****************"
Il est plus intéressant de le taper ainsi :
cat <<MENU
Voici mon menu :
[1] Utiliser ftp
[2] Utiliser vi
[3] Sauvegarder
****************
MENU
La syntaxe Heredoc se construit à l'aide des '<<' et l'usage
d'une chaine de caractères ; cette dernière peut être n'importe quoi, pourvu qu'elle
encadre le bloc, en début et fin du bloc en question ...
ici, j'ai utilisé '
Comme je le disais au-début, il est possible que la syntaxe Heredoc renferme un bloc de commande utile. Exemple pour vi :
vi mon_fichier <<1ciKommenSe47
i
Ceci sera la première ligne de mon fichier.
Ceci se trouve être la seconde ligne.
Et, puisque je suis méga-sympa, je le remplis d'une troisième ligne
^[
ZZ
1ciKommenSe47
Pour ceux qui ne comprennent pas, j'ouvre avec 'vi' un fichier dans lequel j'insère trois lignes, et je sauvegarde le fichier 'mon_fichier'.
Exemple évolué de Heredoc
Voici un petit script montrant un des usages, dans la gestion de menu, en Bash... :
#!/bin/bash
#
# On affecte l'affichage d'un menu créé avec une syntaxe Heredoc
# dans une variable nommée menu
#
menu=$(cat <<MENU
Voici mon menu :
[1] Utiliser ftp
[2] Utiliser vi
[3] Sauvegarder
****************
MENU
)
function call_menu() {
clear
if [ -n "$1" ]; then echo "Ce choix '$1' n'est pas valable !!!"; fi
choix=0
# ici, j'affiche la variable menu
echo "$menu"
read choix
}
while call_menu; do
case $choix in
1) mssg="Vous avez choisi ftp"; break;;
2) mssg="Vous allez utiliser vi"; break;;
3) mssg="Allez, zou ... la sauvegarde"; break;;
*) call_menu $choix ;; # pour tout autre choix, j'appelle à nouveau le menu...
esac
done
echo "$mssg"
exit 0
Bien sûr, ce tutoriel est très simpliste, minimaliste ... pour aller plus loin dans l'aventure, je vous invite à lire l'excellent "Guide avancé des scripts Bash".
| Page : Bash : FAQ : syntax_heredoc : |