Programmation Système
(Script Shell) L3 IRT
Franck ADJEGAN
Janvier 2025
Ce que vous allez apprendre pendant
le cours
• Qu’est-ce qu’un script ?
• Les composants principaux d’un script.
• Comment utiliser des variables.
• De quelle manière peut-on effectuer des tests et des prises de
décision.
• Comment donner des arguments à votre script.
• Comment permettre à l’utilisateur de rentrer des données qui vont
pouvoir être utilisées par le script.
Qu’est ce qu’un script
Une série de commandes définies dans un fichier pour l’automatisation
d’une tâche donnée
Ces commandes sont exécutées les unes après les autres par un
interpréteur (le shell dans notre cas)
Tout ce qui est réalisable en ligne de commande peut être inclus dans un
script
Le scripting est une méthode pour l’automatisation de tâches
Cas d’ Utilisation
maintenance quotidienne d’un système
sauvegarde hebdomadaire de fichiers vers un serveur
planification de tâches répétitives et/ou fastidieuses
extraction de données utiles de fichiers volumineux
Comment Rendre un script
Exécutable
Pour pouvoir exécuter un fichier de script, il faut définir dessus les droits de
manière à ce que celui-ci devienne exécutable .
Utilisation de chmod (change mode)
Syntaxe :
chmod a+x nom_fichier
chmod a+x permet de rajouter le droit d’exécution à tous les utilisateurs pour le
fichier nom_fichier
Exemple :
chmod a+x monscript.sh
Comment Rendre un script
Exécutable (2)
Les catégories d’utilisateurs
u propriétaire (user)
g groupe (group)
o les autres (others)
a tous (all)
Les permissions
r (4) : autorisation de lecture
w (2) : autorisation d'écriture
x (1) : autorisation d'exécution.
Exemple :
chmod a+x monscript.sh
Comment Exécuter un script
Pour exécuter un script, vous avez le choix de, soit d’utiliser le chemin
relatif , soit d’utiliser le chemin absolu
• Chemin relatif : Il faut être dans le dossier du fichier et faire
./nom_fichier
Exemple ./monscript.sh
Chemin absolu : Peut importe là où on se trouve, on précise le chemin
allant de la racine jusqu’au fichier à exécuter
Exemple : /home/franck/monscript.sh
en supposant que c’est le chemin absolu vers le fichier
ECRIRE UN SCRIPT
Editeur
On peut utiliser n’importe quel éditeur disponible dans l’environnement
Exemple : gedit, emacs, vi, vim, nano sous Linux ; notepad++ sous windows
Le Shebang
C’est la première ligne qu’on trouve dans un fichier de script shell
#!/bin/bash
Il commence par un « # » (ce qui correspond la plupart du temps à des
commentaires) puis d’un « ! » et enfin le chemin menant au programme Bash
Shell
ECRIRE UN SCRIPT
Le Shebang
On y indique le chemin de l’interpréteur qui va lire le script.
Il en existe d’autres. Ci-dessous, quelques exemples :
• #!/bin/sh
• #!/bin/csh
• #!/bin/zsh
• #!/usr/bin/python
Les Commentaires
Les commentaires permettent de rendre des parties du contenu du fichier de script non
interprétées par l’interpréteur
Une ligne commentée commence par le caractère #
On peut aussi commenter la fin d‘une ligne
Mais il n‘existe aucun moyen natif pour commenter plusieurs lignes à la fois. Mais il
existe des solutions.
Ainsi, en dehors du shebang, toute ligne commençant par # ne sera pas interprétée
#!/bin/bash
echo "Bonjour tout le monde"
#Ceci est un commentaire
echo "Merci pour l’explication" #Ceci ne sera pas interprété
Les Variables
Ce sont des espaces de stockage qui possèdent un nom
Il existe deux catégories de variables : Les variables définies par l’utilisateur et les
variables prédéfinies (variables prépositionnées, variables d’environnement, etc.)
Variables définies par l’utilisateur
Le nom d‘une variable est un identificateur
• Caractères alpha-numériques
• Ne peut commencer par un chiffre
• Peut contenir le caractère sous-tiret (_)
Le nom d‘une variable est sensible à la casse : une distinction est faite entre majuscule
et minuscule
Par convention, il est en MAJUSCULE
Les Variables
Syntaxe de déclaration
NOM_DE_LA_VARIABLE="valeur"
Nota : Il ne faut pas mettre d'espace entre le nom de la variable, le signe = et "
Syntaxe d’utilisation
Pour utiliser le contenu d’une variable, il faut faire précéder le nom de la variable
par un $
Un exemple illustratif se trouve sur la page suivante
Les Variables
#!/bin/bash
PRENOM= " Franck"
NOM= " ADJEGAN"
echo "Bonjour $PRENOM $NOM et bienvenue au cours de script shell"
#En supposant que le fichier du code ci-dessus se nome script.sh, et qu’on a
déjà défini les droits d’accès appropriés dessus, son exécution se fera comme
suit :
./script.sh
#ce qui donnera comme résultat :
Bonjour Franck ADJEGAN et bienvenue au cours de script shell
Les Variables
Nota : Dans certains cas, on est obligé d’utiliser les accolades pour entourer le nom
de la variable
#!/bin/bash
PRENOM="Luc"
NOM="SAGBO"
AGE="18"
echo "Bonjour $PRENOM ${NOM}, vous avez ${AGE}ans"
./script.sh
Bonjour Luc SAGBO, vous avez 18ans
Nota : Ici, si on ne mettait pas les accolades, on aurait de problèmes dans l’interprétation de $NOM,
à cause de la virgule qui est collée au nom de la variable. De même on n’aurait pas pu afficher l'âge
avec la chaine ans collée à la variable désignant l'âge.
Les Variables
Assigner les sorties de commandes à une variable
Il est tout a fait possible d'assigner la sortie standard d'une commande à une variable en la mettant
entre parenthèses
#!/bin/bash
PRENOM="Luc"
NOM="SAGBO"
MACHINE=$(hostname)
echo "Bonjour $PRENOM $NOM et bienvenu sur la machine ${MACHINE}. "
Une autre syntaxe est également possible suivant le script et elle utilise le symbole ` (alt gr + 7) à
la place du $() pour exécuter une commande.
#!/bin/bash
PRENOM="Luc"
NOM="SAGBO"
MACHINE=`hostname`
echo "Bonjour $PRENOM $NOM et bienvenu sur la machine ${MACHINE}."
LES VARIABLES SPÉCIFIQUES :
PRÉPOSITIONNÉES
Quelques variables spécifiques au shell qui permettent de récupérer des informations sur les
arguments passés ou sur l'exécution en cours.
• $0 indique le nom d'une commande (nom du shell ou du script shell en cours d’exécutionou)
• $# indique le nombre de paramètres positionnels d'une commande (nombre total
d'arguments passés)
• $$ indique le numéro de processus du shell courant (PID : Process ID)
• $? Code qui indique un résultat lié au déroulement de la dernière commande exécutée
• 0 : Pas d'erreur. Autre valeur : cas contraire.
• $* ensemble des paramètres (arguments) d'une commande (sous forme de liste séparée par
le l'IFS)
• $@ ensemble des paramètres (arguments) d'une commande (sous forme de liste séparée par
des espaces)
• $1 à $9 représentent des paramètres positionnels (les arguments passés à une commande ou
à un script).
LES VARIABLES D'ENVIRONNEMENT
PATH représente les différents chemins où se trouvent les exécutables.
PS1 affiche la structure du prompt principal, ou celui par défaut.
HOME contient le répertoire de base de l'utilisateur.
SHELL indique le shell utilisé par l'utilisateur.
LANG indique la langue utilisée.
TEMP contient le chemin où les processus stockent les fichiers temporaires.
OSTYPE indique le type de système d'exploitation.
LD_LIBRARY_PATH contient les différents chemins où se trouvent les
bibliothèques.
USER indique l'utilisateur connecté à la session courante.
EDITOR indique l'éditeur utilisé par défaut au sein de la session courante.
LES VARIABLES D'ENVIRONNEMENT
MANPATH contient l'ensemble des répertoires où se situent les fichiers MAN.
MANPATH indique le nom du fichier contenant l'historique des commandes enregistrées.
HISTSIZE valeur limitant le nombre de commandes enregistrées dans le fichier historique.
PWD contient le chemin du répertoire actuel.
Nota : La liste des variables spéciales et celles d’environnement présentées ici n’est que
partielle. Pour connaitre par exemple toutes les variables d’environnement, il suffit de taper la
commande env dans la console.
Vous êtes aussi priés de tester chacune des variables présentées sur les pages 16 à 18 pour
mieux en comprendre l’utilité.
Pour tester une des variable, il suffit de faire
echo $NOM_VARIABLE
LES CONSTANTES : VARIABLES NON
MODIFIABLES
La notion de constante n’existe pas vraiment en Shell script.
Mais comme une constante n’est qu’une variable non modifiable, il y a la
possibilité d’utiliser le mot clé readonly pour rendre une variable non
modifiable
Syntaxe : readonly NOM_CONSTANTE="Valeur"
On vient donc de définir une variable comme une constante.
LES TESTS
La notion de constante n’existe pas vraiment en Shell script.
Mais comme une constante n’est qu’une variable non modifiable, il y a la
possibilité d’utiliser le mot clé readonly pour rendre une variable non
modifiable
Syntaxe : readonly NOM_CONSTANTE="Valeur"
On vient donc de définir une variable comme une constante.