Système Unix/Linux
Chapitre 6 : La programmation Shell
Pr H. ZAYDI GI & GP 2025/2026
Chapitre 6 : La programmation shell
Le shell est plus qu’un interpréteur de commande , c’est un puissant langage de
programmation avec notamment une gestion des variables, des tests et des boucles,
des opérations sur variables, des fonctions...
Sous linux, un fichier contenant des commandes est appelé script
Dans le reste de ce chapitre on utilisera :
Script : Un fichier contenant des commandes pour le Shell
Shell: l’interpréteur de commande + le langage correspondant
Chapitre 6 : La programmation Shell
Comme tout langage de programmation, le shell comporte des instructions et des
variables
Tout jeu d’instructions peut contenir :
❑Toutes les commandes Linux
❑L’invocation de programmes exécutables (ou de scripts) avec passage de
paramètres
❑Des instructions d’assignation de variables
❑Des instructions conditionnelles et itératives
❑Des instructions d’entrée - sortie
NB: le mécanisme de redirection et des tubes sont utilisés dans les scripts
Chapitre 6 : La programmation Shell
Remarques :
1. Le shell est un langage interprété ( pas besoin de recompiler les scripts à chaque
modification )
2. Possibilité d’utiliser plusieurs shell en même temps ( écrire le jeu d’instructions
d’un script dans un shell , et exécuter en // un autre script sur un autre shell )
3. Si un script commence par la ligne :
#!/bin/xxx ( chemin d’accès du shell xxx qui doit interpréter ce script )
Il est interprété par le shell /bin/xxx
Chapitre 6 : La programmation Shell
Par convention les shells scripts se terminent généralement (pas obligatoirement) par «
.sh » pour le Bourne Shell et le Bourne Again Shell, par « .ksh » pour le Korn Shell et
par « .csh » pour le C Shell.
Dans ce qui suit on suppose que le shell de l’environnement utilisateur est le bash
Les bases de programmation exposées sont communes à tous les interpréteurs de
commande issus de la famille des bournes - shell
Ainsi , la première ligne de chaque script shell est #!/bin/bash
Chapitre 6 : La programmation Shell
❑Le premier script
Créer avec l’éditeur nano , vi ou gnome-text-editor ( ou autre éditeur selon OS) le
fichier [Link]
Le fichier contient :
#!/bin/bash
echo bonjour $USER , ceci est mon premier script
Echo est une commande qui permet d’afficher tout ce qui suit la commande
Exécuter le script
Chapitre 6 : La programmation Shell
❑Le premier script
Un script peut être exécuter en tant que commande : [Link]
Un script peut être exécuté en mode mise au point grâce à la commande
sh :
Sh -x [Link] mode trace
Sh -v [Link] mode verbose
Demander au shell de tracer le déroulement du script ou de le
commenter
Chapitre 6 : La programmation Shell
❑Le premier script
Éditez votre fichier [Link] par gedit
Ajouter les deux lignes suivantes :
pwd
whereis mkdir
Lancer l’exécution en mode verbose
Qu est ce qui se passe pendant l’exécution ?
Le mode verbose recopie sur la sortie standard chaque ligne avec interprétation
➔le shell lit le script et l’interprète ligne par ligne
Chapitre 6 : La programmation Shell
❑Le passage des paramètres
Les scripts shell permettent aussi de recevoir des paramètres pendant l’exécution
Créer le script : listf qui contient ls –aCFl
Rendez le exécutable ( chmod +x nomDuScript )
Ce script ne s’applique qu’au répertoire courant
Pour le rendre plus général , on va lui transmettre le nom d’un répertoire en arguments
Chapitre 6 : La programmation Shell
❑Le passage des paramètres
Premier script avec passage de paramètres :
Avec vi , nano ,vim ,kwrite ou gedit modifier le script listf de la façon suivante :
Echo « contenu du répertoire $1 »
Ls –aCF $1
L’exécution donne par exemple :
root@Localhost# listf /tmp
Contenu du répertoire /tmp
Le contenu proprement dit
Chapitre 6 : La programmation Shell
Le passage des paramètres : Généralisation
Le nombre de paramètres passés en argument à un script n est pas limité à
9
Toutefois , seules les neuf variables 1 à 9 permettent de désigner ces
paramètres dans le script : ce n’est plus valable dans les versions
récentes, on peut passer plus que 9 ; la notation change
La commande shift permet de contourner ce problème ; après shift le ieme
paramètre est désigné par $ i-1 : c’est toujours valable
Chapitre 6 : La programmation Shell
❑Le passage des paramètres : Généralisation
Exemple
Créer le script [Link]
Qui contient :
#!/bin/bash
Echo $1 $2 $3
P1=$1
Shift
Echo $1 $2 $3
Echo $p1
Exécuter le script , remarquer le fonctionnement de shift
Exécuter le sans shift
Chapitre 6 : La programmation Shell
❑Les variables spéciales
En plus des variables 1,2,…………..9, le Shell prédéfinit des variables facilitant la
programmation :
0 Contient le nom sous lequel le script est invoqué
# Contient le nombre de paramètres passés en argument
* Contient la liste de paramètres passés en argument
? Contient le code de retour de la dernière commande exécutée
$ Contient le numéro de process (PID) du shell ( décimal )
Chapitre 6 : La programmation shell
❑Les variables spéciales
Exercice 1
Écrire un script appelé [Link]
Ce script doit afficher à son exécution ce qui suit :
Nom-script a été appelé avec « Nb-param » paramètres
Qui sont : (liste des paramètres )
Le script doit , également , afficher son PID
Chapitre 6 : La programmation shell
❑Les variables spéciales
Corrigé de l’exercice 1
#!/bin/bash
echo ‘’$0 a été appelé avec $# paramètres’’
echo ‘’qui sont : $*’’
eho ‘’le PID de ce script est $$’’
Chapitre 6 : La programmation shell
❑Les instructions de lecture et d’écriture : echo & read
Ces instructions permettent de créer des fichiers de commandes interactifs par l’instauration
d’un dialogue sous forme de question/réponse
La question est posée par l’ordre echo et la réponse est obtenu par l’ordre read à partir du
clavier
Read variable1 variable2 ……………………variablen
Chapitre 6 : La programmation shell
❑Les instructions de lecture et d’écriture : echo & read
Exemple :
Créer le script [Link]
Ce script contient :
echo –n « nom de fichier à afficher : »
read fichier
more $fichier
Chapitre 6 : La programmation shell
❑Les structures de contrôle
Le shell possède des structures de contrôle telles qu’il en existe dans les langages de
programmation d’usage général :
❑Instructions conditionnelles ( if ..then .. Else , test , case )
❑Itérations bornées
❑Itérations non bornées
Chapitre 6 : La programmation shell
❑Les structures de contrôle
A. Les instructions conditionnelles
Pour la programmation des actions conditionnelles , nous disposons de trois
outils :
▪L’instruction if
▪La commande test qui la complète
▪L’instruction case
Chapitre 6 : La programmation shell
❑Les structures de contrôle
A. Les instructions conditionnelles
A.1 L’instruction if
Elle présente trois variantes qui correspondent aux structures sélectives à une,
deux ou n alternatives
A.1.1 La sélection à une alternative : if…. Then…. fi
If commande
Then commandes
Fi
Chapitre 6 : La programmation shell
A.1.1 La sélection à une alternative : if…. Then…. fi
Les commandes sont exécutées si la commande condition commande renvoie un code retour
nul ( $?=0)
Exemple
Créer le script echoif1 qui contient :
Il test l’existence de l’utilisateur user1 dans la base de données des utilisateurs
Si , la réponse est positive , il affiche à l’écran : l’utilisateur user1 est connu du système
If grep –i « user1 » /etc/passwd
Then echo L\’utilisateur user1 est connu du système
fi
Chapitre 6 : La programmation shell
A.1.2 La sélection à deux alternatives : if…. Then…else …. fi
If commande
Then commandes1
Else commandes2
fi
Les commandes commandes1 sont exécutées si la commande conditionnelle commande
renvoie un code retour nul, si non ce sont les commandes commandes2 qui sont exécutées
Chapitre 6 : La programmation shell
A.1.2 La sélection à deux alternatives : if…. Then…else …. fi
Exemple
Créer le script echoif2 qui fait ce qui suit :
Il test l’existence de l’utilisateur user1 dans la base de données des utilisateurs
Si , la réponse est positive , il affiche à l’écran : l’utilisateur user1 est connu du système
Si la réponse est négative il affiche à l écran : l’utilisateur user2 n’est pas connu du système
If grep –i « user1 » /etc/passwd
Then echo L\’utilisateur user1 est connu du système
Else echo L\’utilisateur user1 n’est pas connu du système
fi
Chapitre 6 : La programmation shell
A.1.3 La sélection à n alternatives : if…. Then…elif …. fi
If commande1
Then commandes1
Elif commande2
Then commandes2
Elif commande3
Then commandes3
…..
…..
….
Else
Commandes0
fi
Chapitre 6 : La programmation shell
A. Les instructions conditionnelles
A.2 La commande test
Elle constitue l’indispensable complémentaire de l’instruction if. Elle permet :
❑De reconnaître les caractéristiques des fichiers et des répertoires
❑De comparer des chaînes de caractères
❑De comparer algébriquement des nombres
Elle permet en particulier de tester l'existence et le statut d'un fichier
Chapitre 6 : La programmation shell
A. Les instructions conditionnelles
A.2 La commande test
Cette commande existe sous deux syntaxes différentes:
test expression
Ou
[ expression ]
La commande test répond à l’interrogation formulée dans expression
Chapitre 6 : La programmation shell
Les expressions les plus utilisées sont :
❖ -d nom vrai si le répertoire nom existe
❖ -f nom vrai si le fichier nom existe
❖ -s nom vrai si le fichier nom existe et non vide
❖ -r nom vrai si le fichier nom existe et accessible en lecture
❖ -w nom vrai si le fichier nom existe et accessible en écriture
❖ -x nom vrai si le fichier nom existe et accessible en execution
❖ -z chaine vrai si la chaîne de caractère chaîne est vide
❖ -n chaine vrai si la chaine de caractère chaine est non vide
❖ c1=c2 vrai si les chaînes de caractère c1 et c 2 sont identique
❖ c1!=c2 vrai si les chaînes de caractère c1 et c 2 sont differentes
❖ n1 –eq n2 vrai si les entités n1 et n2 sont égaux
Chapitre 6 : La programmation shell
Exemple 1 :
Écrire un script qui teste si le script qui lui est passé en paramètre est un
exécutable .
Si la réponse est positive , il affiche : vous pouvez exécuter le script ‘nom
du script’
Si la réponse est négative , il fait ce qui suit :
▪ Affiche : Donnez le droit d’exécution au script : non du script passé en
argument à l aide de la command chmod ,
▪ Il le rend exécutable ,
▪ Affiche l’information qui vérifie que c’est exécutable et
▪ Ecrit le résultat de son exécution dans un fichier passé en argument
▪ Affiche le contenu du fichier contenant le résultat de l’exécution
Chapitre 6 : La programmation shell
Exemple 1 : corrigé :
if test -x $1
then
echo " vous pouvez exécuter le script $1. "
else
echo " donnez le droit d’exécution au script $1 à l aide de la command chmod . "
chmod +x $1
ls-l |grep $1
bash $1 >$2
cat $2
fi
Chapitre 6 : La programmation shell
Exemple 2 :
Écrire un script qui lit deux variables c1 et c2
Il affiche : la première variable = la valeur de la variable c1
la deuxième variable = la valeur de la variable c2
Il compare les chaînes de caractères c1 et c2 , il teste si elles sont différentes
Et affiche : c1 et c2 sont différentes , si non il affiche : c1=c2=la valeur de la
variable
Chapitre 6 : La programmation shell
Exemple 2 : corrigé :
#!/bin/sh
Read C1
Read C2
Echo «la première variable C1= $C1 »
Echo « »
Echo « la deuxième variable C2 = $C2 »
If test $C1 != $C2
then
echo «c1 et c2 sont différentes »
else
echo «c1=c2= $C1 »
fi
Chapitre 6 : La programmation shell
Exemple : même script avec la notation [ ]
if [ -x scriptf ]
then
echo " vous pouvez exécuter se script. "
else
echo " vous devez rendre scriptf exécutable grâce à la commande
chmod . "
fi
Chapitre 6 : La programmation shell
Exemple 3 :
Écrire un script qui dit si le paramètre passé est :
➢un fichier
➢un répertoire
➢n'existe pas
Affiche pour chaque cas un texte qui convient
Chapitre 6 : La programmation shell
Exemple 3 :Corrigé
#!/bin/bash
# ce script teste la nature du paramètre (fichier, répertoire, n'existe pas)
If test -f $1
then
echo "C'est un fichier«
elif test -d $1
then
echo "C'est un répertoire«
elif test -e $1
then
echo "je ne sais pas ce que c'est..."
else
echo $1" n'existe pas..."
fi
Chapitre 6 : La programmation shell
les tests arithmétiques
Lorsqu’on utilise la commande test (ou son équivalent [...]) pour comparer
des entiers, on dispose des opérateurs suivants :
-lt : strictement inférieur (<)
-le : inférieur ou égal (<=)
-eq : égal (==)
-ne : différent (!=)
-gt : strictement supérieur (>)
-ge : supérieur ou égal (>=)
Chapitre 6 : La programmation shell
les tests arithmétiques
Exemple :
Ecrire un script qui lit deux entiers et il les compare :
#!/bin/bash
Echo «donnez le premier nombre »
Read x
Echo ‘donnez le second nombre’
Read y
if [ "$x" -lt "$y" ]; then
echo "$x est plus petit que $y"
fi
Chapitre 6 : La programmation shell
les tests arithmétiques
Expressions arithmétiques (( ))
Ecrire un script qui lit deux entiers et il les compare :
Dans un contexte d’évaluation arithmétique (entre doubles parenthèses (( ))),
Bash reconnaît les opérateurs classiques du C, notamment :
< : strictement inférieur
<= : inférieur ou égal
> : strictement supérieur
>= : supérieur ou égal
== : égal
!= : différent
Chapitre 6 : La programmation shell
A. Les instructions conditionnelles
A.3 L’instruction case
L’instruction case est une instruction très puissante et très commode pour effectuer un choix
multiple dans un fichier de commandes
Syntaxe :
case chaîne in
motif1) commandes 1 ;;
motif2) commandes 2 ;;
….
….
motifn) commandes n ;;
esac
Chapitre 6 : La programmation shell
L’instruction case
Le shell cherche , parmi les différentes chaînes de caractères motif1 , motif2 ….motifn
proposées, la première qui correspond à chaîne et il exécute les commandes correspondantes
Un double point virgule(; ;) termine chaque choix
La chaîne dans un case peut prendre diverses formes :
➢Un chiffre
➢Une lettre ou un mot
➢Des caractères spéciaux du shell
➢Une combinaison de ces éléments
Chapitre 6 : La programmation shell
L’instruction case
Test des valeurs d'une variable par cas :
case var in
cas 1) commandes;;
cas n) commandes;;
*) commandes;;
esac
Chapitre 6 : La programmation shell
L’instruction case
Exemple
Écrire un script qui permet d’afficher le nombre de paramètres passés à une commande:
utiliser case , 1 , 2 ou plus
Chapitre 6 : La programmation shell
L’instruction case
Exemple permettant d’afficher le nombre de paramètres passés à une
commande:
case $# in
1) echo 'J\'ai reçu un seul argument !' ;;
2) echo 'J\'ai reçu deux arguments !' ;;
*) echo 'J\’ai, au moins, trois arguments !' ;;
esac
Chapitre 6 : La programmation shell
En utilisant la structure case, écrire un script qui :
❑affiche un menu
❑demande à l'utilisateur de saisir une option du menu
❑affiche à l'utilisateur l'option qu'il a choisie
Ce qui doit s’afficher à l’écran pour le menu est :
*********** Menu général ************
<1> Comptabilité
<2> Gestion commerciale
<3> Paie
<9> Quitter
**************************************
Chapitre 6 : La programmation shell
#!/bin/bash
# affichage de menu, choix d'option, affichage de l'option
clear
echo "***********Menu général***********"
echo "<1> Comptabilité"
echo "<2> Gestion commerciale«
echo "<3> Paie"
echo "<0> Quitter"
echo "**********************************"
read choix
case $choix in
1) texte='la comptabilité' ;;
2) texte='la gestion commerciale' ;;
3) texte='la paie' ;;
0) texte='de quitter' ;;
*) texte="un choix qui n'existe pas" ;;
esac
echo "Vous avez choisi "$texte
Chapitre 6 : La programmation shell
I . Itération bornée : Boucle for
La boucle for permet de parcourir une liste de valeurs, elle effectue donc un nombre de
tours de boucle qui est connu à l'avance.
Trois formes de syntaxe sont possibles :
Forme 1 )
for variable in chaine1 chaine2 …………..chainen
do instruction(s)
done
Chapitre 6 : La programmation shell
Les itérations
I . Itération bornée : Boucle for
Forme 2 )
For variable
Do commandes
Done
Forme 3 )
For variable in *
Do commandes
Done
Chapitre 6 : La programmation shell
Les itérations
I . Itération bornée : Boucle for
Pour les 3 formes, les commandes entre do et done sont exécutées pour la variable du shell
Pour forme 1 :
for variable in chaine1 chaine2 …………..chainen
do instruction(s)
done
La variable prend sa valeur dans : chaîne 1 ……chaîne n
Chapitre 6 : La programmation shell
Les itérations
I . Itération bornée : Boucle for
Pour les 3 formes, les commandes entre do et done sont exécutées pour la variable du shell
Pour forme 2 :
For variable
Do commandes
Done
La variable prend sa valeur dans la liste des paramètres du script
Chapitre 6 : La programmation shell
Les itérations
I . Itération bornée : Boucle for
Pour la forme 3 :
For variable in *
Do commandes
Done
Les fichiers du répertoire courant constituent les différentes valeurs de la variable
Chapitre 6 : La programmation shell
Boucle for
Par exemple, on peut utiliser la boucle for pour programmer un clone de la fonction ls :
for i in *
do echo $i
done
l'étoile est remplacée par tous les fichiers du répertoire courant, la boucle for va donc donner
successivement comme valeur à la variable i tous ces noms de fichiers
Chapitre 6 : La programmation shell
I . Boucle for
La boucle for est très souvent utilisée dans un script pour parcourir la liste des
arguments fournie au script .
Exemple :
for i in "$*"
do echo "$i"
done
cet exemple liste tous les arguments transmis au script.
Chapitre 6 : La programmation shell
I . Boucle for
Exercices
Écrivez un script qui parcourt tous les fichiers d’un répertoire donné an
argument (par exemple /etc/) et qui affiche leur nom.
rajoutez un test pour n’afficher que les fichiers ordinaires (et pas les
répertoires ou autres types de fichiers).
Chapitre 6 : La programmation shell
I . Boucle for
Exercices
#!/bin/bash
rep="$1"
for file in "$rep"/*
do
if [ -f "$file" ]; then
echo "Fichier : $file"
fi
done
Chapitre 6 : La programmation shell
Boucle for
Écrire un scripte qui donne à son exécution ce qui suit :
Liste des répertoires sous « répertoire courant »
======================================
NomRepertoire1 : est un répertoire
NomRepertoire2 : est un répertoire
……………………………….
………………………………..
NomRepertoiren ; est un répertoire
=======================================
NomRepertoire1 : répertoire est replacé par le contenu de la variable i qui est le nom du
répertoire
Chapitre 6 : La programmation shell
II . Itérations non bornées: Les boucles until et while
La boucle while exécute un bloc d'instructions tant qu'une certaine condition est satisfaite,
lorsque cette condition devient fausse la boucle se termine
Cette boucle permet donc de faire un nombre indéterminé de tours de boucle, voir même
infini si la condition ne devient jamais fausse (horreur programmatique !)
Syntaxe :
while condition
do instruction(s)
done
Chapitre 6 : La programmation shell
II . Les boucles until et while
La syntaxe de la boucle until est exactement la même que celle de la boucle while,
mais sa signification est inversée : la boucle est exécutée tant que la condition est
fausse.
Syntaxe :
Until commandealpha
Do commandebeta
done
Les commandes sont exécutées tant que ou jusqu’à ce que :
Chapitre 6 : La programmation shell
II . Les boucles until et while
Exemples
1. Écrire un script qui liste les paramètres qui lui sont passés en argument jusqu’à ce qu’il
rencontre le mot « fin » avec la boucle while
2. Réécrire le même script avec la boucle until
Chapitre 6 : La programmation shell
II . Les boucles until et while
Exemples : corrigés
1. Écrire un script qui liste les paramètres qui lui sont passés en argument
jusqu’à ce qu’il rencontre le mot « fin » avec la boucle while
#!/bin/bash
While [ $1 !=fin ];
Do
Echo $1
shift
done
Chapitre 6 : La programmation shell
II . Les boucles until et while
Exemples
1. Réécrire le même script avec la boucle until
Until [ $1 = fin ]
Do
echo $1
shift
done
Chapitre 6 : La programmation shell
II . Les boucles until et while
Exercice
Ecrire un script qui crée 20 fichiers dont les noms sont :
Fichier1
Fichier2
.
.
.
.
.
fichier20
Chapitre 6 : La programmation shell
II . Les boucles until et while
Exercice
#!/bin/sh
# Fichier « 20fichiers«
numero=1
while test $numero -lt 21
do
# la commande "touch" permet de créer un fichier vide :
touch fichier"$numero"
# cette commande ajoute 1 à la variable "numero" :
numero=$(($numero + 1))
done
Chapitre 6 : La programmation shell
II . Les boucles until et while
Exercice
Écrire un script avec les deux boucle until et while
Le script doit afficher le contenu des paramètre qui lui sont passés tant qu’il
ne rencontre pas le mot début
Et recommence l’affichage du reste des paramètre jusqu’à ce qu’il rencontre
le mot fin
Chapitre 6 : La programmation shell
II . Les boucles until et while
Corrigé
Écrire un script avec les deux boucle
until et while
#!/bin/bash
while [ $1!=debut ]
While [ $1 != debut] do do
echo $1
Shift shift
Done done
Shift until [ $1 = fin ]
Until [ $1 = fin ] do
echo $1
Echo $1 shift
Shift done
Done ]