Module Système d'exploitation : architectures et outils
Enseignant Hamza HAMMAMI
Année universitaire 2024-2025
École Nationale d'Ingénieurs de Tunis
Programmation Shell avec Bash
Objectif du TP
L'objectif de ce TP est de familiariser les étudiants avec la programmation shell en
utilisant le langage Bash. Ils apprendront à écrire des scripts Bash pour automatiser
des tâches courantes, à manipuler des chiers et des répertoires, ainsi qu'à utiliser des
commandes système pour interagir avec le système d'exploitation.
Pré-requis
Pour suivre ce TP, les étudiants doivent avoir :
Un environnement Linux ou Unix.
Des connaissances de base en ligne de commande.
Les concepts clés :
Bash : Le Bourne Again Shell est un interpréteur de commandes Unix et
un langage de script.
Scripts Bash : Des chiers contenant des commandes Bash, utilisés pour
automatiser des tâches.
Variables : Des symboles utilisés pour stocker des valeurs.
Conditions et boucles : Des structures de contrôle pour exécuter des
commandes en fonction de conditions spéciques.
Commandes système : Des commandes pour interagir avec le système
d'exploitation, telles que ls, mkdir, cp, etc.
1. Notions de base sur les variables
Variables dans le Shell
Une variable est utilisée pour stocker une valeur temporairement. La syntaxe de dé-
claration est :
NOM_VARIABLE = " valeur "
Pour accéder à la valeur d'une variable, on utilise $NOM_VARIABLE.
1
Exemple d'utilisation :
nom = " Alice "
echo " Bonjour , $nom ! " # Affiche : Bonjour , Alice !
Règles pour les variables :
Elles ne doivent pas contenir d'espaces.
Elles ne peuvent pas commencer par un chire.
Les valeurs sont sensibles à la casse : VAR et var sont des variables diérentes.
2. Commande read et echo
read : Lire des entrées utilisateur
La commande read permet de demander une entrée utilisateur.
Syntaxe basique :
read -p " Entrez votre pr é nom : " prenom
echo " Bonjour , $prenom ! "
Autres possibilités avec read :
read var1 var2 : Lire plusieurs valeurs d'une seule ligne.
read -s : Masquer l'entrée (utile pour les mots de passe).
read -n 1 var : Lire uniquement un caractère.
read -t 5 var : Lire une entrée avec un délai de 5 secondes.
echo : Acher du texte
echo "Texte" : Ache un texte simple.
echo -e "Ligne 12" : Active les caractères spéciaux comme \n.
echo -n "Texte" : Ache sans sauter de ligne.
Exemple complet combinant read et echo :
read -p " Entrez votre pr é nom : " prenom
read -s -p " Entrez votre mot de passe : " mdp
echo -e " \ nBonjour , $prenom . Votre mot de passe a é t é
enregistr é . "
2
3. Opérateurs de Comparaison et Autres Commandes
Opérateurs de Comparaison d'Entiers
En bash, les opérateurs de comparaison d'entiers sont utilisés avec la commande test
ou les crochets [ ]. Voici les opérateurs les plus utilisés pour comparer des entiers :
-eq : égal à.
-ne : diérent de.
-lt : inférieur à.
-le : inférieur ou égal à.
-gt : supérieur à.
-ge : supérieur ou égal à.
Exemple d'utilisation pour la comparaison d'entiers :
a =5
b =10
if [ $a - lt $b ]; then
echo " $a est inf é rieur à $b "
fi
Dans cet exemple, a est inférieur à b, donc le message sera aché.
Opérateurs de Comparaison sur les Chaînes de Caractères
Les opérateurs de comparaison pour les chaînes de caractères en bash permettent de
tester des relations entre deux chaînes.
= : égal à.
!= : diérent de.
-z : la chaîne est vide.
-n : la chaîne n'est pas vide.
< : lexicographiquement avant.
> : lexicographiquement après.
Exemple de comparaison de chaînes :
str1 = " Bonjour "
str2 = " Salut "
if [ " $str1 " != " $str2 " ]; then
echo " Les c h a n e s sont diff é rentes . "
fi
Dans cet exemple, les chaînes str1 et str2 sont diérentes, donc le message sera
aché.
Opérateurs de Comparaison sur les Fichiers
En bash, il existe plusieurs opérateurs pour tester des propriétés d'un chier.
-e : Vérie si le chier existe.
-f : Vérie si c'est un chier ordinaire.
-d : Vérie si c'est un répertoire.
3
-s : Vérie si le chier n'est pas vide.
-r : Vérie si le chier est lisible.
-w : Vérie si le chier est modiable.
-x : Vérie si le chier est exécutable.
Exemple de comparaison sur un chier :
fichier = " exemple . txt "
if [ -f " $fichier " ]; then
echo " $fichier est un fichier ordinaire . "
fi
Si [Link] est un chier ordinaire, le message sera aché.
Opérations sur les Nombres : Addition, Soustraction, Multiplica-
tion, etc.
Voici les opérations arithmétiques de base en bash :
Addition : +
Soustraction : -
Multiplication : *
Division : /
Puissance : **
Modulo (reste de la division) : %
Exemple d'opérations arithmétiques :
a =5
b =3
sum = $ (( a + b ) )
echo " La somme de $a et $b est $sum "
Cet exemple ache la somme de a et b, c'est-à-dire 8.
Formatage des Dates et Heures
Voici comment acher la date et l'heure dans diérents formats en utilisant la com-
mande date :
%H : L'heure au format 00..23.
%M : Minutes 00..59.
%S : Secondes 00..60.
%A : Jour complet.
%B : Mois complet.
%d : Jour du mois.
%m : Numéro du mois.
%y : Deux derniers chires de l'année.
%Y : Année complète.
Exemple d'achage de la date :
date -d " +1 days " + " % A % d /% m /% Y "
Cet exemple ache la date du jour suivant dans le format complet : Jour mois/numéro_du_mois/ann
4
Les Quotes (Guillemets)
Sous bash, vous pouvez utiliser deux types de quotes pour délimiter des chaînes :
" " : Double quotes ou guillemets. Utilisés pour autoriser l'expansion de variables
à l'intérieur de la chaîne.
' ' : Simple quotes. Utilisés pour rendre la chaîne littérale (aucune expansion de
variable).
Exemple avec les double quotes :
nom = " Alice "
echo " Bonjour , $nom ! " # Affiche : Bonjour , Alice !
Exemple avec les simples quotes :
echo ' Bonjour , $nom ' # Affiche : Bonjour , $nom
Dans ce dernier exemple, les simples quotes empêchent l'expansion de la variable $nom.
4. Structures conditionnelles
Syntaxe if
if [ condition ]; then
# Commandes si la condition est vraie
elif [ autre_condition ]; then
# Commandes si l ' autre condition est vraie
else
# Commandes si aucune condition n ' est vraie
fi
Exemple : Vérier l'âge d'une personne
read -p " Entrez votre ge : " age
if [ $age - lt 18 ]; then
echo " Vous ê tes mineur . "
elif [ $age -eq 18 ]; then
echo " Vous avez exactement 18 ans . "
else
echo " Vous ê tes majeur . "
fi
5. Boucles en Bash
Boucle while
5
compteur =1
while [ $compteur -le 5 ]; do
echo " Compteur : $compteur "
compteur = $ (( compteur + 1) )
done
Boucle for
for fichier in *. txt ; do
echo " Nom du fichier : $fichier "
done
6. Exercices
Exercice 1 : Compter les chiers dans un répertoire
Énoncé : Créer un script qui ache le nombre total de chiers présents dans
le répertoire actuel.
Explication pour les étudiants :
Vous devez utiliser la commande Linux ls pour lister les chiers du ré-
pertoire.
Utilisez la commande wc -l pour compter le nombre de lignes, car chaque
chier correspond à une ligne dans la sortie de ls.
Achez le résultat à l'utilisateur avec echo.
Étapes guidées :
Ouvrir un éditeur de texte comme nano pour écrire votre script.
Sauvegarder votre script avec une extension .sh.
Donner les permissions d'exécution avec la commande :
chmod +x votre_script . sh
6
Exercice 2 : Acher les chiers cachés selon la demande de l'utilisateur
Énoncé : Créer un script Shell qui demande à l'utilisateur s'il souhaite
acher ou non les chiers cachés du répertoire actuel.
Étapes guidées :
Les chiers cachés sous Linux commencent par un point (.).
Utilisez la commande ls -a pour acher tous les chiers (y compris les
chiers cachés).
Demandez à l'utilisateur de répondre par "o" (oui) ou "n" (non).
Si l'utilisateur répond "o", achez tous les chiers. Sinon, achez uni-
quement les chiers visibles.
Étapes guidées :
Utilisez la commande read pour lire la réponse de l'utilisateur.
Les structures conditionnelles comme if seront nécessaires pour eectuer
des choix basés sur la réponse de l'utilisateur.
Exercice 3 : Création d'un répertoire avec des chiers
Énoncé : Créer un script qui :
Crée un répertoire nommé Ex1.
Dans ce répertoire, crée cinq chiers nommés respectivement Un, Deux,
Trois, Quatre, et Cinq.
Chaque chier doit contenir une seule ligne de texte :
Le chier Un contient Première ligne.
Le chier Deux contient Deuxième ligne.
Le chier Trois contient Troisième ligne.
Le chier Quatre contient Quatrième ligne.
Le chier Cinq contient Cinquième ligne.
Étapes guidées :
Utilisez la commande mkdir pour créer un répertoire.
Utilisez la commande echo pour écrire une ligne dans un chier, combinée
à la redirection >.
Vous pouvez automatiser la création des chiers avec une boucle pour
éviter de répéter la commande.
Concept clé à comprendre : La commande echo envoie du texte vers la
sortie standard ou vers un chier. La redirection > permet de sauvegarder ce
texte dans un chier.
7
Exercice 4 : Comparaison de trois chaînes de caractères
Énoncé : Créer un script Shell qui :
Lit trois chaînes de caractères :
Soit en ligne de commande (comme arguments du script).
Soit au clavier (si aucun argument n'est donné).
Compare les trois chaînes et ache un message indiquant :
Si les trois chaînes sont identiques.
Si seulement deux d'entre elles sont identiques.
Si les trois chaînes sont diérentes.
Étapes guidées :
Utilisez des variables comme $1, $2, $3 pour lire les arguments passés en
ligne de commande.
Sinon, utilisez la commande read pour demander les chaînes à l'utilisa-
teur.
Utilisez des conditions if et des opérateurs de comparaison = pour vérier
si deux chaînes sont identiques.
Concept clé à comprendre : En bash, utilisez [ "$chaine1" =
"$chaine2" ] pour comparer deux chaînes de caractères.
Exercice 5 : Vérier l'existence d'un utilisateur
Énoncé : Créer un script qui vérie si un utilisateur donné existe sur le
système. L'utilisateur sera passé comme paramètre au script.
Étapes guidées :
Utilisez la commande id pour vérier si un utilisateur existe.
Si l'utilisateur existe, la commande retourne des informations sur cet
utilisateur. Sinon, une erreur sera générée.
Achez un message indiquant si l'utilisateur existe ou non.
Étapes guidées : Utilisez des redirections pour gérer les sorties des com-
mandes : >/dev/null permet de cacher la sortie d'une commande.
8
Exercice 6 : Tester un chier passé en paramètre
Énoncé : Créer un script qui eectue les tests suivants sur un chier passé
en argument au script :
Vérie si le chier existe.
Ache le type de chier (chier ordinaire ou répertoire).
Vérie si le chier est non vide.
Ache les droits d'accès du chier (lecture, écriture, exécution).
Étapes guidées :
Utilisez l'option -e avec la commande test pour vérier si un chier
existe.
Utilisez -f pour vérier s'il s'agit d'un chier ordinaire.
Utilisez -d pour vérier s'il s'agit d'un répertoire.
Testez si le chier est vide avec -s.
Vériez les permissions avec les options -r, -w, et -x.
Concept clé à comprendre : Les chiers et répertoires sous Linux pos-
sèdent des permissions associées. Les tests conditionnels du Shell permettent
de vérier ces propriétés facilement.
À l'issue de ce TP, les étudiants seront capables de maîtriser :
La création et l'exécution de scripts Shell en utilisant bash.
La manipulation de variables, chaînes de caractères, et chiers sous Linux.
L'utilisation de structures de contrôle comme les conditions (if, elif, else)
et les boucles (for, while).
L'application de commandes Linux dans un script pour automatiser des
tâches.