Nous utilisons des cookies pour améliorer votre expérience. En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies.


Politique de confidentialité

Lecture et écriture des données dans un script shell

 

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èreDescription
\aAlerte (cloche)
\eEchapper
\nNouvelle ligne.
\tTabulation horizontale.
\vTabulation 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 :

OptionDescription
-a nom_tabStocke les mots dans une variable tableau nom_tab. La numérotation des éléments du tableau commence à 0.
-d delimStocke les mots dans une variable tableau nom_tableau. La numérotation des éléments du tableau commence à 0.
-eRécupère une ligne d'entrée à partir d'un shell interactive
-n NCHARSLa commande read arrête la lecture après les caractères NCHARS, au lieu d'attendre une ligne d'entrée complète.
-p MSGAffiche la chaîne de caractères MSG, sans nouvelle ligne, avant de commencer à lire toute entrée.
-rGrâ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.
-sMode silencieux. Si la commande read prend en compte les entrées du terminal, elle ne fait pas écho des frappes de touches.
-t TimeoutDé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 FDLecture à 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

Partager ce cours avec tes amis :
Rédigé par ESSADDOUKI Mostafa
ESSADDOUKI
The education of the 21st century opens up opportunities to not merely teach, but to coach, mentor, nurture and inspire.