09/09/2024

Bash

Script Bash – Comment écrire dans un nouveau fichier ou un fichier existant ?

I. Présentation

Dans ce tutoriel, nous allons apprendre à écrire dans un fichier dans un script Bash. Que ce soit pour stocker la sortie d'une commande, créer un fichier journal (log), stocker des données ou encore générer un rapport, il peut s'avérer utile d'être capable d'écrire dans un fichier.

Nous verrons comment utiliser les opérateurs de redirection de Bash, ainsi que la commande tee. Au travers différents exemples, nous allons apprendre à ajouter du texte à un nouveau fichier et à un fichier existant, à écraser son contenu, et à écrire du texte en s'appuyant sur des variables.

Pour rappel, voici le lien vers notre introduction au Bash :

II. Écrire du texte dans un fichier

Pour écrire du texte dans un fichier, vous pouvez utiliser l'opérateur de redirection ">". Cet opérateur permet de rediriger la sortie d'une commande vers un fichier, ou envoyer simplement du texte, en écrasant le contenu existant dans le fichier. Si le fichier n'existe pas, il sera créé.

Voici un premier exemple :

#!/bin/bash
echo "IT-Connect !" > sortie.txt

Dans cet exemple, le texte "IT-Connect !" est écrit dans un fichier nommé "sortie.txt". Si ce fichier n'existe pas, il sera créé. Si le fichier existe déjà, son contenu sera écrasé par notre texte.

Si vous voulez ajouter du texte à un fichier sans écraser son contenu, c'est-à-dire en écrivant à la suite du contenu déjà présent dans le fichier, vous devez utiliser l'opérateur de redirection ">>".

#!/bin/bash
echo "IT-Connect !" >> sortie.txt

L'image ci-dessous illustre bien la différence de comportement entre les opérateurs ">" et ">>".

Script Bash - Ecrire dans un fichier

III. Rediriger la sortie d'une commande dans un fichier

Nous avons vu comment écrire du texte dans un fichier à l'aide de deux redirecteurs différents. Sur le même principe, vous pouvez rediriger la sortie d'une commande dans un fichier. L'exemple ci-dessous stocke le résultat de la commande "ip a" (afficher la configuration IP des interfaces réseau) dans un fichier texte nommé "ip.txt".

ip a > ip.txt

Si nous affichons le contenu du fichier, il contient bien le résultat de la commande :

Bash - Envoyer sortie commande dans un fichier

De la même façon, nous pouvons lire un fichier avec la commande cat et rediriger la sortie vers un autre fichier. Ceci permet de copier le contenu d'un fichier pour le stocker dans un autre fichier. Voici un exemple avec le fichier "/etc/hosts".

cat /etc/hosts > hosts.txt

Là encore, nous obtenons le résultat souhaité :

Bash - Envoyer contenu d'un fichier dans un autre fichier

IV. Utiliser des variables pour écrire dans un fichier

Le texte que vous souhaitez écrire dans un fichier peut tout à fait contenir des variables. Ainsi, les valeurs des variables seront écrites dans le fichier. Voici un exemple très simple pour illustrer ce cas de figure. Ici, l'utilisateur doit saisir son prénom, puis ce prénom est écrit dans un fichier.

#!/bin/bash
echo "Saisissez votre prénom :"
read prenom
echo "Bonjour $prenom !" > prenom.txt

Nous utilisons la commande read pour permettre la saisie d'une information de la part de l'utilisateur.

Sachez que lors de l'utilisation de "echo" pour écrire dans un fichier, nous pouvons ajouter un saut de ligne. Pour cela, il faut ajouter l'option "-e" à la commande echo puis utiliser "\n" pour ajouter un saut de ligne.

Par exemple :

#!/bin/bash
echo "Saisissez votre prénom :"
read prenom
echo -e "Bonjour $prenom ! \nBienvenue sur IT-Connect !" > prenom.txt

Le contenu du fichier obtenu en sortie montre bien que le saut de ligne a été pris en charge :

Script Bash - Saut de ligne pour écrire dans un fichier

Remarque : pour aller plus loin dans le formatage du texte, envisagez d'utiliser "printf" à la place de "echo".

V. La technique Here Document (EOL)

La technique appelée Here Document ou heredoc est pratique pour écrire plusieurs lignes dans un seul et même fichier de sortie. Autrement dit, elle va permettre de rediriger plusieurs lignes vers un fichier.

Voici un exemple :

#!/bin/bash
cat << EOL > sortie.txt
> Bonjour !
> Voici le nom de l'utilisateur connecté : $(whoami)
> IT-Connect
> EOL

À partir du moment où la commande "cat << EOL > sortie.txt" est exécutée, nous ouvrons en quelque sorte une session pour écrire dans le fichier "sortie.txt". Une première ligne apparaît : il suffit d'écrire un texte et d'appuyer sur Entrée. Ensuite, une seconde ligne s'affiche et ainsi de suite... Pour quitter, il suffit d'indiquer le mot-clé "EOL" et d'appuyer sur Entrée.

Ci-dessous, le résultat en image :

Script Bash - EOL Here Document

VI. Écrire dans un fichier avec la commande tee

Sous Linux, la commande tee permet de lire l'entrée standard, d'écrire son contenu dans un fichier et de rediriger ensuite vers la sortie standard (ainsi, elle peut être positionnée entre deux commandes, via le pipeline). Donc, nous pouvons écrire dans un fichier tout en ayant le résultat de la commande dans la console.

Voici quelques exemples d'utilisation de la commande tee pour écrire dans un fichier.

Tout d'abord, pour écrire la sortie de la commande "ls" dans un fichier tout en affichant cette sortie à l'écran :

    ls -l /home/flo/Documents/ | tee sortie_ls.txt

    Voici le résultat obtenu :

    Utiliser la commande tee sous Linux

    Nous obtenons un résultat intéressant et un comportement différent vis-à-vis des redirecteurs.

    Pour ajouter la sortie d'une commande dans un fichier sans écraser le contenu (équivalent de ">>"), nous devons ajouter l'option "-a", comme ceci :

      ls -l /home/flo/Documents/ | tee -a sortie_ls.txt

      Enfin, nous pouvons indiquer à la commande tee d'écrire dans plusieurs fichiers :

        df -h | tee fichier1.txt fichier2.txt

        Ces quelques exemples vous permettront de prendre en main la commande tee en tant qu'alternative aux opérateurs de redirection.

        Note : si besoin, vous pouvez préciser "sudo" devant la commande tee pour élever vos privilèges si vous avez besoin d'écrire dans un répertoire protégé.

        VII. Conclusion

        Les opérateurs de redirection en Bash sont essentiels pour écrire dans un fichier de sortie. Ceux que l'on a évoqué dans ce tutoriel et que l'on a appris à utiliser, ne sont pas les seuls disponibles en Bash. Néanmoins, ce sont les plus utilisés. Donc, pour résumer :

        • > : redirige la sortie d'une commande vers un fichier, en écrasant le contenu existant.
        • >> : redirige la sortie d'une commande vers un fichier, en ajoutant le texte à la fin du fichier. Le contenu existant est préservé.
        • << : utile pour la redirection de texte avec la technique Here Document (EOL)

        Pour approfondir le sujet, vous pouvez consulter nos tutoriels Bash en utilisant le lien ci-dessous :

        author avatar
        Florian BURNEL Co-founder of IT-Connect
        Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
        Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

        Laisser un commentaire

        Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

        Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.