Lecture et écriture des données dans un script shell
Après vous être familiarisé avec la façon d'écrire un script shell, il convient de mentionner ici que vous pouvez écrire et exécuter un script shell en mode interactif et non interactif. Les scripts interactifs nécessitent une entrée de l'utilisateur pendant l'exécution du script. D'autre part, les scripts non interactifs peuvent être exécutés en arrière-plan sans aucune intervention de l'utilisateur.
Dans ce cours, nous aborderons deux fonctions ; affichage des messages (opération d’écriture) et lecture des entrées.
Affichage des messages
La plupart des commandes shell produisent leur propre sortie, qui est affichée sur le terminal où le script est exécuté. Cependant, vous voudrez souvent ajouter vos propres messages pour aider l'utilisateur du script à savoir ce qui se passe dans le script. Vous pouvez le faire avec la commande echo.
La commande echo utilise des guillemets doubles ou simples pour délimiter les chaînes de texte. Si vous les utilisez dans votre chaîne, vous devez utiliser un type de guillemets dans le texte et l'autre type pour délimiter la chaîne :
devinfo@ubuntu:~/scripts$ echo "c'est juste un message de test" c'est juste un message de test
Vous pouvez ajouter des instructions echo n'importe où dans vos scripts shell où vous devez afficher des informations supplémentaires comme dans notre premier script shell.
#!/bin/bash echo "Date & Heure:`date`" echo "Le shell courant : $SHELL" echo "Nom du système d'exploitation" ; uname exit 0
Lorsque vous exécutez ce script, il produit la sortie suivante :
devinfo@ubuntu:~$ hello.sh Date & Heure:mer. 20 oct. 2021 07:43:15 PDT Le shell courant : /bin/bash Nom du système d'exploitation Linux
echo prend quelques options:
- -e : interprète les caractères d'échappement avec une barre oblique inverse.
- -n : supprime le saut de ligne de fin.
devinfo@ubuntu:~$ echo bienvenue au Maroc bienvenue au Maroc devinfo@ubuntu:~$ echo -n bienvenue au Maroc bienvenue au Marocdevinfo@ubuntu:~$
Les différents caractères d'échappement utilisés par la commande echo sont les suivants :
Caractère | Description |
---|---|
\a | Alerte (cloche) |
\e | Echapper |
\n | Nouvelle ligne. |
\t | Tabulation horizontale. |
\v | Tabulation verticale. |
\\ | Barre oblique inverse |
devinfo@ubuntu:~$ echo "bienvenue au Maroc" bienvenue au Maroc devinfo@ubuntu:~$ echo -e "bienvenue \n au \tMaroc" bienvenue au Maroc
devinfo@ubuntu:~$ echo -e "bon\vjour" bon jour devinfo@ubuntu:~$ echo -e "bon\ejour" bonour devinfo@ubuntu:~$ echo -e "bon\njour" bon jour devinfo@ubuntu:~$ echo -e "bon\tjour" bon jour
echo permet aussi d'imprimer le contenu d'une variable en utilisant le symbole $ avant le nom de la variable
devinfo@ubuntu:~$ a=5; echo "valeur de a : $a" valeur de a : 5
Lecture des entrées
La lecture est la commande intégrée à l'interpréteur de commandes qui permet de prendre les entrées de l'utilisateur pour réaliser un script interactif de l'interpréteur de commandes. Cette commande est le complément des commandes echo et printf. Elle prend une ou plusieurs variables. La syntaxe de la commande read est la suivante :
read [options] Var1 Var2 ... VarN
La commande read est associée à certaines options :
Option | Description |
---|---|
-a nom_tab | Stocke les mots dans une variable tableau nom_tab. La numérotation des éléments du tableau commence à 0. |
-d delim | Stocke les mots dans une variable tableau nom_tableau. La numérotation des éléments du tableau commence à 0. |
-e | Récupère une ligne d'entrée à partir d'un shell interactive |
-n NCHARS | La commande read arrête la lecture après les caractères NCHARS, au lieu d'attendre une ligne d'entrée complète. |
-p MSG | Affiche la chaîne de caractères MSG, sans nouvelle ligne, avant de commencer à lire toute entrée. |
-r | Grâce à cette option, la commande read n'interprète pas la barre oblique inverse comme un caractère d'échappement, mais la barre oblique inverse est traitée comme une partie de la ligne. |
-s | Mode silencieux. Si la commande read prend en compte les entrées du terminal, elle ne fait pas écho des frappes de touches. |
-t Timeout | Délai d'attente et retour d'échec si une ligne complète d'entrée n'est pas lue dans les secondes de délai d'attente spécifiées. La commande Read ne lira aucune donnée si la valeur du délai d'attente est égale à zéro. Si le délai d'attente n'est pas mentionné, la valeur de la variable shell TMOUT est utilisée à sa place, si elle existe. |
-u FD | Lecture à partir du descripteur de fichier FD au lieu de l'entrée standard. |
Dans le fichier script trouver.sh, la commande read prend les entrées de l'utilisateur et les stocke dans des noms de variables respectifs, fnom et rep.
#!/bin/bash echo -e "Saisir le nom du fichier a rechercher \c" read fnom read -p "le nom du répertoire dans lequel vous souhaitez lancer la recherche : " rep find $rep -name *$fnom* exit 0
devinfo@ubuntu:~/scripts$ trouver.sh Saisir le nom du fichier a rechercher hello le nom du répertoire dans lequel vous souhaitez lancer la recherche : /home /home/devinfo/scripts/hello.sh
Dans le script ci-dessus, chaque variable est mentionnée avec une commande de lecture individuelle, mais vous pouvez mentionner une ou plusieurs variables avec une seule commande de lecture comme indiqué ci-dessous :
#!/bin/bash echo -e "Saisir le nom du fichier ainsi le répertoire" read fnom rep find $rep -name *$fnom* exit 0
devinfo@ubuntu:~/scripts$ trouver.sh Saisir le nom du fichier ainsi le répertoire hello /home /home/devinfo/scripts/hello.sh d