REPUBLIQUE DU CAMEROUN REPUBLIC OF CAMEROON
Paix-Travail-Patrie Peace-Work-Fatherland
******** ********
MINISTERE DE L’ENSEIGNEMENT MINISTRY OF HIGHER
SUPERIEUR EDUCATION
******** ********
INSTITUT UNIVERSITAIRE DES GRANDES THE UNIVERSITY INSTITUTE OF THE
ECOLES DES TROPIQUES TROPICS
******* ********
ADMINISTRATION DES SYSTEMES ET
RESEAUX LINUX
THEME: LA PROGRAMMATION SHELL
MEMBRES DU GROUPE:
TCHINDA Arcel Borel
NJOUMEMI Safia
NKEMEGNI Edwin
BOUAIKON Stephanie
TCHOUHEUK Modeste
NTOCKO Fabrice
TCHAPGA Fairgal
TESSE SIEWE
ANNEE ACADEMIQUE: 2025/2026
STRUCTURE DE L’Exposé
I. Introduction
II. Fonctionnalités de base
III. Eléments Syntaxique du Langage
IV. Typologie des Interpréteurs (Les types de Shell)
V. Exemples Divers
VI. Conclusion
I- Introduction
Dans l’univers des systèmes d’exploitation, la communication entre l’utilisateur et la machine
ne se limite pas aux interfaces graphique, c’est dans ce sens qu’il existe un outil
fondamentale, discret mais d’une puissance redoutable : le Shell
Le Shell est un programme informatique qui fait office d’interpréteur de commande. Il joue le
rôle d’intermédiaire entre l’utilisateur et le noyau (kernel) du système d’exploitation.
Concrètement, il reçoit les commandes saisies par l’utilisateur, les interprète puis les transmet
au système pour exécution.
Apparue dès la première version d’UNIX dans les années 1970, le Shell est devenu
incontournable dans l’administration du système, le développement logiciel
et l’automatisation des taches. Il offre à l’utilisateur un environnement de travail en ligne de
commande (CLI-COMMAND LINE INTERFACE) permettant d’exécuter les programmes,
de gérer des taches, de configurer le système et même d’écrire des scripts complexe.
II- Fonctionnalités de Base
Le Shell assure plusieurs fonctions essentielles dans un système d'exploitation :
• Exécution de commandes : Le Shell permet à l'utilisateur de lancer des
programmes et des commandes système directement depuis le terminal (ex : ls,
cd, cp, mv…).
• Gestion des fichiers et répertoires : Il offre la possibilité de créer, modifier,
déplacer, copier ou supprimer des fichiers et dossiers.
• Redirection des entrées/sorties : Le Shell peut rediriger les flux d'entrée
(stdin), de sortie (stdout) et d'erreur (stderr) vers des fichiers ou d'autres
programmes grâce aux opérateurs >, >>, < et |.
• Gestion des processus : Il permet de lancer des processus en arrière-plan, de
les surveiller, de les suspendre ou de les terminer.
• Écriture de scripts : Le Shell est également un véritable langage de
programmation permettant d'automatiser des tâches répétitives via des scripts
Shell (.sh).
• Gestion des variables d'environnement : Il manipule les variables système
(PATH, HOME, USER, etc.) qui configurent le comportement du système.
La gestion des entrées sorties :
o > : Redirige la sortie vers un fichier (écrase le contenu)
o >> : Ajoute la sortie à la fin d’un fichier
o < : Utilise un fichier comme entrée de commande.
L’Exécution en arriere plan : En ajoutant & a la fin d’une
commande, le Shell redonne la main a l’utilisateur pendant que le
processus travaille.
Les substitutions : Capacité à remplacer une commande par son
résultat dans une ligne de code via les apostrophes inversées
(‘command’) ou $(command).
III. Éléments du Langage de programmation
Le langage Shell possède une syntaxe propre comprenant plusieurs éléments clés :
Variables : Une variable est un nom symbolique associé à une valeur stockée en
mémoire. En Shell, on la déclare simplement en écrivant nom=valeur, sans espace
autour du signe égal. Pour lire sa valeur, on la préfixe du signe dollar : $nom ou mieux
${nom} pour éviter les ambiguïtés. La portée des variables est globale par défaut dans
un script. Pour limiter une variable à une fonction, on utilise le mot-clé local. Le Shell
fournit aussi des variables spéciales prédéfinies très utiles : $0 contient le nom du
script, $1, $2... les arguments, $# le nombre d'arguments, $@ tous les arguments sous
forme de liste, $? le code retour de la dernière commande, $$ le PID du processus en
cours, et $! le PID du dernier processus lancé en arrière-plan.
nom="Stéphanie"
age=21
Structures de contrôle : Les structures de contrôle permettent de diriger le flux
d'exécution d'un script selon des conditions.
o La structure principale est if / elif / else / fi. La condition est évaluée entre
crochets simples [ ] (syntaxe POSIX) ou double [[ ]] (syntaxe Bash étendue,
recommandée). La structure se termine obligatoirement par fi.
if [[ $note -ge 16 ]]; then
echo "Très bien"
elif [[ $note -ge 14 ]]; then
echo "Bien"
elif [[ $note -ge 10 ]]; then
echo "Passable"
else
echo "Insuffisant"
fi
o La structure case / esac est l'équivalent du switch d'autres langages. Elle
permet de comparer une valeur à plusieurs motifs. Chaque motif se termine par
;;. On peut combiner plusieurs valeurs avec |, et utiliser le motif * comme cas
par défaut. Les motifs supportent les caractères génériques.
case $jour in
lundi|mardi|mercredi|jeudi|vendredi)
echo "Jour de travail" ;;
samedi|dimanche)
echo "Week-end" ;;
*)
echo "Jour inconnu" ;;
esac
Boucles : Le Shell propose trois types de boucles.
o La boucle for est la plus polyvalente. Elle peut itérer sur une liste de valeurs
explicites, sur une plage numérique avec la syntaxe {debut..fin} ou
{debut..fin..pas}, sur les fichiers correspondant à un motif, ou encore avec une
syntaxe de style C avec initialisation, condition et incrément.
# Sur une liste explicite
for ville in Douala Yaoundé Bafoussam; do
echo "$ville"
done
# Sur une plage avec pas
for i in {0..20..5}; do echo $i; done # 0 5 10 15 20
# Style C
for ((i=0; i<5; i++)); do
echo $i
done
# Sur des fichiers .php
for f in *.php; do
echo "Traitement : $f"
done
o La boucle while s'exécute tant que la condition est vraie. Elle est idéale pour
les situations où le nombre d'itérations n'est pas connu à l'avance, comme la
lecture d'un fichier ligne par ligne ou l'attente d'un événement.
# Boucle while classique
compteur=1
while [[ $compteur -le 5 ]]; do
echo "Tour $compteur"
((compteur++))
done
# Lecture d'un fichier ligne par ligne
while IFS= read -r ligne; do
echo "$ligne"
done < mon_fichier.txt
o La boucle until est l'inverse du while : elle s'exécute tant que la condition est
fausse. Les instructions break et continue permettent respectivement
d'interrompre une boucle immédiatement ou de passer à l'itération suivante.
# Until : s'exécute tant que la condition est fausse
x=0
until [[ $x -ge 5 ]]; do
echo $x
((x++))
done
# break et continue
for i in {1..10}; do
[[ $i -eq 3 ]] && continue # saute le 3
[[ $i -eq 7 ]] && break # arrête au 7
echo $i
done # affiche : 1 2 4 5 6
Fonctions : Les fonctions permettent de regrouper un ensemble d'instructions sous un
nom réutilisable. On les déclare avec la syntaxe nom_fonction() { ... }. Les arguments
sont accessibles via $1, $2, etc., exactement comme pour un script. Il est impératif
d'utiliser local pour toute variable interne afin d'éviter les conflits avec les variables
globales.
Une fonction peut retourner un code de retour (de 0 à 255) avec return, ou transmettre
une valeur en l'affichant avec echo et en capturant la sortie via $().
calculer() {
local a=$1
local b=$2
local operation=$3
local result
case $operation in
add) result=$((a + b)) ;;
sub) result=$((a - b)) ;;
mul) result=$((a * b)) ;;
div) result=$((a / b)) ;;
esac
echo $result # retourner une valeur via stdout
# Appel et récupération du résultat
res=$(calculer 10 3 add)
echo "Résultat : $res" # → 13
# Code de retour booléen
verifier_age() {
local age=$1
[[ $age -ge 18 ]] && return 0 || return 1
if verifier_age 20; then echo "Majeur"; fi
→ Règle d'or : toujours utiliser local pour les variables internes à une fonction.
Opérateurs : Le Shell dispose de plusieurs catégories d'opérateurs.
o Les opérateurs arithmétiques (+, -, *, /, %, **) s'utilisent dans la syntaxe
$(( )). On dispose aussi des opérateurs d'affectation combinés comme +=, -
=, *=, et des opérateurs d'incrémentation ++ et --.
o Les opérateurs de comparaison numérique s'écrivent avec des mots : -eq
pour l'égalité, -ne pour la différence, -lt pour inférieur strict, -le pour
inférieur ou égal, -gt pour supérieur strict, et -ge pour supérieur ou égal.
Ces opérateurs s'utilisent à l'intérieur de crochets [ ] ou [[ ]].
o Pour les chaînes de caractères, on utilise == ou = pour l'égalité, != pour la
différence, -z pour vérifier qu'une chaîne est vide, et -n pour vérifier qu'elle
est non vide.
o Les opérateurs logiques && (ET), || (OU) et ! (NON) permettent de
combiner des conditions. Utilisés directement entre des commandes, &&
signifie «exécuter la commande suivante seulement si la précédente a
réussi», et || signifie «exécuter la suivante seulement si la précédente a
échoué».
o Les opérateurs sur les fichiers permettent de tester l'existence et les
propriétés d'un fichier ou répertoire : -e (existe), -f (fichier ordinaire), -d
(répertoire), -r (lisible), -w (modifiable), -x (exécutable), -s (non vide), -L
(lien symbolique), -nt (plus récent que), -ot (plus ancien que).
# Arithmétique
echo $((5 + 3)) # → 8
echo $((10 % 3)) # → 1
Commentaires : Tout ce qui suit le caractère # est ignoré par l'interpréteur.
Shebang (#!/bin/bash) : Ligne placée en début de script pour indiquer l'interpréteur
utiliser.
IV. Typologie des Interpréteurs (Les types de Shell)
Il existe plusieurs types de Shell, chacun ayant ses propres caractéristiques :
• Bourne Shell (sh) : Le premier Shell Unix créé par Stephen Bourne en 1977. Il
est la base de nombreux autres Shells.
• C Shell (csh) : Développé par Bill Joy, il introduit une syntaxe inspirée du
langage C et des améliorations comme l'historique des commandes.
• Korn Shell (ksh) : Combinaison de sh et csh, il apporte des fonctionnalités
avancées tout en maintenant la compatibilité avec sh.
• Bash (Bourne Again Shell) : Le Shell le plus répandu sur les systèmes Linux. Il
est compatible sh et intègre de nombreuses améliorations (auto-complétion,
historique, scripts puissants).
• Zsh (Z Shell) : Shell très configurable et puissant, populaire notamment grâce au
Framework Oh My Zsh. C'est le Shell par défaut sur MacOs.
• Fish Shell : Un Shell moderne et convivial, avec une auto-complétion intelligente
et une syntaxe claire, mais moins compatible avec les scripts sh traditionnels.
V. Exemples Divers
Voici quelques exemples pratiques illustrant l'utilisation du Shell :
Exemple 1 : Afficher un message
#!/bin/bash
echo "Bonjour, monde !"
Exemple 2 : Boucle for
#!/bin/bash
For i in 1 2 3 4 5; do
echo "Valeur : $i"
Done
Exemple 3 : Condition if/else
#!/bin/bash
age=18
If [ $age -ge 18 ]; then
echo "Majeur"
else
echo "Mineur"
fi
VI. Conclusion
Au terme de cet exposé, il ressort clairement que le Shell est bien plus qu'un simple outil de
saisie de commandes. Il constitue un environnement de travail complet, puissant et flexible,
indispensable pour tout professionnel de l'informatique.
Grâce à ses fonctionnalités de base, exécution de commandes, gestion des fichiers, redirection
des flux et automatisation .Le Shell permet d'optimiser considérablement le travail quotidien
d'un administrateur système ou d'un développeur. La diversité des interpréteurs (Bash, Zsh,
Ksh, etc.) témoigne de la richesse de cet écosystème et de sa capacité à s'adapter à des besoins
variés.
Les éléments syntaxiques du langage Shell — variables, conditions, boucles,
fonctions — font de lui un véritable langage de programmation, capable de prendre en charge
des tâches complexes d'automatisation et d'administration. Les exemples présentés ont permis
d'illustrer concrètement la facilité avec laquelle on peut écrire des scripts utiles et efficaces.
En définitive, maîtriser le Shell, c'est acquérir une compétence transversale
précieuse qui ouvre la voie à une meilleure compréhension des systèmes d'exploitation, au
développement de scripts robustes, et à une productivité accrue dans tout environnement
Unix/Linux.