0% ont trouvé ce document utile (0 vote)
4 vues63 pages

Programmation Shell sous Linux : Guide Complet

Le chapitre 6 traite de la programmation Shell sous Unix/Linux, expliquant que le shell est un langage de programmation puissant permettant la gestion de variables, les tests, les boucles et l'exécution de scripts. Il aborde la création de scripts, le passage de paramètres, les variables spéciales, ainsi que les structures de contrôle comme les instructions conditionnelles et les tests arithmétiques. Des exemples pratiques illustrent la création et l'exécution de scripts, ainsi que l'utilisation de commandes pour interagir avec l'utilisateur.

Transféré par

lyyalmalky14
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues63 pages

Programmation Shell sous Linux : Guide Complet

Le chapitre 6 traite de la programmation Shell sous Unix/Linux, expliquant que le shell est un langage de programmation puissant permettant la gestion de variables, les tests, les boucles et l'exécution de scripts. Il aborde la création de scripts, le passage de paramètres, les variables spéciales, ainsi que les structures de contrôle comme les instructions conditionnelles et les tests arithmétiques. Des exemples pratiques illustrent la création et l'exécution de scripts, ainsi que l'utilisation de commandes pour interagir avec l'utilisateur.

Transféré par

lyyalmalky14
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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 ]

Vous aimerez peut-être aussi