Académique Documents
Professionnel Documents
Culture Documents
1 Introduction
Shell est un programme unique qui fournit à l'utilisateur une interface pour interagir avec le
noyau en acceptant des commandes lisibles par l'homme, puis le convertit en langage
compréhensible par le noyau. Shell, dans un système d'exploitation Linux, peut prendre des
entrées de l'utilisateur sous forme de commandes, les traiter, puis afficher une sortie. Vous pouvez
accéder à Shell à l'aide de Terminal sous Linux.
Il existe deux catégories de Shell :
Un Shell est accessible par un utilisateur à l'aide d'interfaces de ligne de commande. Ainsi, il y a
des programmes comme le terminal sous Linux ou Mac et l'invite de commande dans Windows
pour obtenir des entrées sous la forme de commandes lisibles par l'homme, puis afficher la sortie
dans la même interface de ligne de commande.
Le Shell graphique fournit aux utilisateurs une interface utilisateur graphique (GUI Graphical
User Interface) pour interagir, effectuer des opérations telles que l'ouverture, la fermeture et
l'enregistrement de fichiers. Les systèmes d’exploitation Windows et Ubuntu sont d'excellents
exemples de GUI Shell (Desktop), où un utilisateur n'a pas à saisir des commandes pour chaque
opération. Pourtant, derrière chaque action, il y a une commande Shell qui s'exécute pour
effectuer ces actions.
La plupart du temps, nous utilisons les commandes Shell une par une dans le terminal pour nos
tâches quotidiennes. Cependant, il arrive parfois que l’on effectue des tâches complexes ou des
tâches répétitives, ce qui implique une série de commandes exécutées dans un ordre précis et bien
déterminé. Un Shell peut également prendre des commandes en entrée d'un fichier, donc pour
faciliter notre travail, nous pouvons écrire ces commandes dans un fichier et les exécuter dans le
Shell pour éviter le travail manuel. Ces fichiers sont appelés scripts Shell.
2
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
• Etape 1 : Créer un fichier à l'aide d'un éditeur de texte avec l'extension « .sh ». L’extension
permet au système de savoir quel programme utilisé et pour nous utilisateur ou
administrateur, nous pouvons savoir immédiatement que c’est un script bash.
• Etape 2 : La première instruction à mettre dans le fichier est le « #!/bin/bash ». Cette
instruction permet au système de savoir quel programme exécutera les instructions de ce
fichier. Cette instruction s’appelle le « shebang ».
• Etape 3 : La troisième étape consiste à écrire les instructions que l’on souhaite faire
exécuter par le script.
Voici donc un exemple de fichier de script Shell :
#!/bin/bash
ls
Nous le nommerons « list.sh » et pour l’exécuter dans le terminal, nous utiliserons la commande
suivante :
$ bash list.sh
3 Avantages
Le script bash présente de nombreux avantages :
4 Inconvénients
Le script bash peut avoir des inconvénients :
• Sujette aux erreurs, une seule erreur peut modifier le déroulement du programme et peut
être nuisible.
• Vitesse d'exécution lente.
• Avoir des structures de données très minimales, contrairement aux autres langages de
programmation.
• Pas bien adapté aux tâches importantes et complexes.
La suite de ce cours vous permettra d’acquérir les notions de base de bash scripting. La plupart
des opérations largement utilisées de bash scripting seront expliquées avec des exemples
simples de script.
3
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
5 Exemples Pratiques
Le programme « Helloworld » est le tout premier programme qu'un programmeur écrit tout en
apprenant un nouveau langage. C’est un programme qui imprime le « Bonjour le monde » en tant
que sortie. Vous pouvez donc créer un fichier helloword.sh à l'aide de l'éditeur (vim ou nano) :
$ nano helloworld.sh
#!/bin/bash
echo "Bonjour le monde"
$ bash helloworld.sh
$ ./helloworld.sh
La commande echo est la commande la plus courante et la plus utilisée sous Linux. Elle est utilisée
pour imprimer du texte ou une sortie dans le Bash. Il dispose de nombreuses options qui
effectuent des opérations différentes.
Syntaxe :
#!/bin/bash
echo "Script Scripting Shell et Python"
echo -n "Je suis un adminsys"
echo -e "\nJe \t domine \t le \t réseau"
4
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
Ici \n est un caractère d’échappement pour une nouvelle ligne, et \t est un caractère
d’échappement pour l’onglet horizontal. Exécutez le fichier avec la commande :
$ bash echo.sh
Les commentaires sont des remarques d'un programmeur sur le but ou la raison du code ou de la
logique. Il est recommandé d’ajouter des commentaires pour qu’à l’avenir, tout le monde puisse
comprendre le code en lisant simplement les commentaires. Les commentaires font partie du code
mais sont ignorés par le compilateur. Dans le script bash, toute ligne commençant par « # » est
considérée comme un commentaire. Par exemple :
#!/bin/bash
# Ceci est un commentaire
echo "Je suis un commentaire"
Ici « # Ceci est un commentaire » est un commentaire, et quand nous exécuterons ce script, le
l’interpréteur ignorera la ligne.
Les commentaires peuvent être des :
#!/bin/bash
: '
Ce script calcul
La somme de 2 et 8.
'
((sum=2+8))
# le résultat sera
echo "sum is $sum"
$ bash multicommentaires.sh
Les variables sont des symboles nommés utilisés pour stocker temporairement des valeurs. Il peut
s'agir d'une chaîne ou d'une valeur numérique que nous pouvons utiliser à n'importe quel endroit
du script. Vous pouvez créer des variables et leur attribuer des valeurs. Les noms de variable
doivent être descriptifs afin que vous puissiez comprendre l'objectif pour lequel vous avez créé
cette variable.
Nous avons trois types de variables dans les scripts bash :
5
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
$ env | less
annee=2021
echo $annee
Vous pouvez voir que nous avons utilisé $ pour référencer sa valeur.
Exemple : Créez un fichier variables.sh et ajoutez-y les lignes ci-dessous.
#!/bin/bash
website=www.esgis.tg
annee=2022
Enregistrez-le et testez-le.
Obtenir la contribution de l’utilisateur est très crucial pour rendre un script interactif, donc à cette
fin dans le script bash, nous utilisons la commande read.
6
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
#!/bin/bash
echo "Veuillez saisir votre nom : "
read nom
echo "Votre nom est $nom"
Nous pouvons également lire l’entrée de l’utilisateur à partir d’arguments de commande, tout
comme n’importe quel autre langage de programmation. Nous pouvons ensuite utiliser ces
arguments dans nos scripts comme $1, $2, et ainsi de suite, selon le nombre d’arguments que nous
avons fournis. Créez un fichier arguments.sh et copiez les lignes ci-dessous en elle.
#!/bin/bash
echo "Nombre d’arguments : $#"
echo "Nom : $1"
echo "Contact : $2"
echo "Nom et Prénom : $3"
Exécutez maintenant le fichier script arguments.sh avec trois paramètres supplémentaires après
son nom comme ici :
Il est aussi possible de lire des arguments de ligne de commande avec des noms. Pour le faire, nous
créons un fichier nommé command_line_names.sh et ajoutons le code suivant.
NB : Ici, deux arguments, X et Y sont lus par ce script et affiche la somme de X et Y.
#!/bin/bash
for arg in "$@"
do
index=$(echo $arg | cut -f1 -d=)
val=$(echo $arg | cut -f2 -d=)
case $index in
X) x=$val;;
Y) y=$val;;
*)
esac
done ((resultat=x+y))
echo "X+Y=$resultat"
Exécutez le fichier avec la commande bash et avec deux arguments de ligne de commande comme
ici :
7
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
Les boucles sont utilisées dans tous les langages de programmation où vous devez exécuter le
même code de façon répétitive. Il existe deux types de boucles dans le script bash (while et for).
Nous verrons chacun par un.
#!/bin/bash
while [CONDITION]
do
[COMMANDS]
done
La condition est évaluée avant d’exécuter les commandes à chaque itération, et elle continuera à
s’exécuter jusqu’à ce que la condition évalue à faux, et la boucle sera terminée.
#!/bin/bash
i=0
while [ $i -le 4 ]
do
echo Number: $i
((i++))
done
#!/bin/bash
for item in [LIST]
do
[COMMANDS]
done
Dans l’exemple ci-dessous, la boucle s’itérera sur chaque élément et générera une table de variable
i.
#!/bin/bash
i=2
for (( compteur=1; compteur<=10; compteur++ ))
do
((resultat= $i * $compteur))
echo "$i x $compteur = $resultat"
done
8
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
Les énoncés conditionnels sont l’un des concepts fondamentaux de tout langage de
programmation. Vous prenez des décisions en fonction de certaines conditions remplies. Dans le
script bash, nous avons des blocs conditionnels.
5.9.1 Déclaration « if »
Dans un script bash, la condition « if » a plusieurs formes, mais regardons l’état de base. Vous
pouvez l’utiliser la condition « if » avec des conditions simples ou multiples. Le bloc de début et de
fin de cette instruction est défini par « if » et « fi ».
if Condition
then
INSTRUCTIONS
fi
Vous pouvez voir si les instructions commencent par évaluer l’état et exécuter les instructions
entre « then » et « fi », à condition que la condition dans if soit évaluée à True, autrement la
déclaration sera ignorée.
Créez un fichier nommé simple_if.sh et ajoutez-y ce code :
#!/bin/bash
if [[ $VAR -gt 10 ]]
then
echo "La variable est plus grande que 10."
fi
Il est demandé à l’utilisateur de saisir un nombre. Si le nombre est plus grand que 10 alors la sorite
« La variable est plus grande que 10. » sera affichée. Autrement, rien ne sera affiché. A titre de
comparaison :
if Condition
then
STATEMENTS1
else
STATEMENTS2
fi
9
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
#!/bin/bash
if [[ $VAR -gt 10 ]]
then
echo "La variable est plus grande que 10."
else
echo "La variable est égale ou plus petite que 10."
fi
Si vous exécutez le code et entrez un nombre, le script affiche une chaîne de caractère en fonction
du fait que le nombre est supérieur ou inférieur/égal à 10.
if Condition1
then
STATEMENTS1
elif Condition2
then
STATEMENTS2
else
STATEMENTS3
fi
#!/bin/bash
if [[ $VAR -gt 10 ]]
then
echo "La variable est plus grande que 10."
elif [[ $VAR -eq 10 ]]
then
echo "La variable est égale à 10."
else
echo "La variable est plus petite que 10."
fi
10
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
L’instruction case est utilisée comme alternative de l’instruction if-elseif-else. Le bloc de départ
et de fin de cette déclaration est défini par « case » et « esac ». Créez un nouveau fichier nommé «
case_example.sh » et ajoutez le script suivant. La sortie du script suivant sera la même que la
précédente si l’exemple.
#!/bin/bash
Syntaxe :
function NomFonction()
{
instructions
}
Maintenant, nous allons créer une fonction somme qui prendra les numéros d’entrée de
l’utilisateur et affichera la somme de ces nombres comme sortie.
#!/bin/bash
function Somme()
{
echo -n "Entrez le premier chiffre : "
read a
echo -n "Entrez le second chiffre : "
read b
echo "La somme est : $(( a+b ))"
}
Somme
11
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
Bash ne peut pas déclarer le paramètre de fonction ou les arguments au moment de la déclaration
de fonction. Mais vous pouvez utiliser des paramètres en fonction en utilisant d’autres variables.
Si deux valeurs sont passées au moment de l’appel de fonction, puis les variables $1 et $2 sont
utilisés pour lire les valeurs.
Pour mieux comprendre, nous allons créer un fichier nommé fonction_parametre.sh et ajouter
le code suivant.
#!/bin/bash
Rectangle_Area() {
area=$(($1 * $2))
echo "L’aire est : $area"
}
Rectangle_Area 10 20
NB : Ici, la fonction Rectangle_Area() calculera l’aire d’un rectangle en fonction des valeurs de
paramètres.
La fonction Bash peut passer à la fois les valeurs numériques et les chaînes de caractères. Pour
bien comprendre nous allons créer un fichier nommé fonction_retour.sh et y ajoutez le code
suivant.
#!/bin/bash
fonction salutation() {
str= "Bonjour, $nom"
echo $str
}
echo "Saisissez votre nom : "
read nom val=$(salutation)
echo "La valeur de retour de la fonction est $val"
NB : La fonction, salutation() renvoie une valeur de chaîne dans la variable, val qui imprime plus
tard en combinant avec d’autres cordes. Vous trouverez plus de détail ici.
Le traitement des chaînes est une partie essentielle du script bash. Le script Bash a un moyen
simple d’obtenir la longueur d’une variable de chaîne. Dans l’exemple, nous allons voir comment :
#!/bin/bash
Str="Bienvenue dans le cours d’Administration Avancée sous Linux"
echo "La longueur est : ${#Str}"
12
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
Le script Bash fournit un moyen facile de gérer les opérations de chaîne comme la concaténation
de plusieurs chaînes en une seule chaîne. Dans l’exemple, nous voyons comment le faire :
#!/bin/bash
string1="Scripting "
string2="Shell "
string3="et Python"
string=$string1$string2$string3
echo "$string est un cours génial !"
Bash donne un moyen d’extraire une sous-chaîne d’une chaîne de caractère. L’exemple ci-dessous
explique comment le faire à partir d’une position particulière. Mais avant expliquons certaines
lignes :
${string:position}
${string:position:length}
Extraire $length de caractères sous-chaîne de $string à partir de $position. Dans l’exemple ci-
dessous, Passons à la pratique :
#!/bin/bash
Str="Bienvenue au cours de SSP"
# Extraction de sous-caractères à partir de la position 15
echo ${Str:15}
# Extraction de 5 caractères de sous-chaîne à partir de la position 15
echo ${Str:15:5}
Le script Bash a un moyen pratique et facile de trouver et de remplacer le texte dans une chaîne.
Il peut être utilisé de deux façons :
${string/pattern/replacement}
Cela ne remplacera que la première correspondance dans la chaîne donnée. Pour remplacer toutes
les correspondances, nous l’utiliserons comme indiqué ci-dessous :
${string//pattern/replacement}
Dans l’exemple qui suit, nous utiliserons les deux options pour vous montrer la différence à la
sortie :
13
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
#! /bin/bash
Str="Le chemin du bash est /bin/bash"
# Recherche et remplacement de la première correspondance uniquement
echo ${Str/bash/sh}
# Recherche et remplacement de toutes les correspondances
echo ${Str//bash/sh}
Dans notre prochain exemple, nous allons écrire un script bash qui acceptera un numéro d’entrée
de l’utilisateur et s’affichera si le nombre donné est un nombre pair ou impair.
#!/bin/bash
echo -n "Veuillez saisir un nombre : "
read n
num=$(expr $n % 2)
if [ $num -eq 0 ]; then
echo "C’est un nombre pair"
else
echo "C’est un nombre impair"
fi
L’exemple suivant vous montrera comment générer le factoriel d’un nombre donné à l’aide d’un
script shell.
#!/bin/bash
echo -n "Veuillez saisir un nombre : "
read n
fact=1
while [ $n -gt 1 ]
do
fact=$((fact * n))
n=$((n - 1))
done
echo $fact
L’exemple suivant vous montrera comment créer un répertoire à partir d’un script shell. Le script
recevra le nom du dossier et vérifiera s’il existe déjà ou non. Dans le cas où il existe, Il affichera
comme message « Le répertoire existe déjà » sinon, il créera un répertoire.
14
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
#!/bin/bash
echo -n "Veuillez entrer le nom d’un dossier ->"
read dir
if [ -d "$dir" ]
then
echo "Le répertoire existe déjà !"
else
`mkdir $dir`
echo "Le répertoire a bien été créé !"
fi
Il est aussi possible de vérifier l’existence d’un fichier en bash en utilisant l’option « -e » ou « -f ».
L’option « -f » est utilisée dans le script suivant pour tester l’existence du fichier. Créez un fichier
nommé « fichier_existe.sh » et ajoutez le code suivant :
NB : Ici, le nom de fichier passera de la ligne de commande.
#!/bin/bash
nom_de_fichier=$1
if [ -f "$nom_de_fichier" ]; then
echo "Le fichier existe !"
else
echo "Le fichier n’existe pas !"
fi
En utilisant Bash, vous pouvez lire des fichiers très efficacement. L’exemple ci-dessous montre
comment lire un fichier à l’aide de scripts shell. Créez un fichier appelé « entreprises.txt » avec
le contenu suivant.
Google
Amazone
Microsoft
Macdonald
KFC
Apple
#!/bin/bash
file='entreprises.txt'
while read line; do
echo $line
done < $file
15
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
À l’aide d’un script bash, vous pouvez également supprimer un fichier. Dans l’exemple, l’utilisateur
sera invité à fournir le nom de fichier comme entrée et le supprimera s’il existe. Il utilise la
commande Linux rm pour la suppression ici.
#!/bin/bash
echo -n "Veuillez saisir le nom d’un fichier ->"
read nom
rm -i $nom
echo "Fichier supprimé !"
De nouvelles données peuvent être ajoutées dans n’importe quel fichier existant en utilisant
l’opérateur '>>' en bash. Créez un fichier nommé « ajout_fichier.sh »et ajoutez le code suivant
pour ajouter du nouveau contenu à la fin du fichier. Ici, « Apprentissage de script bash » sera
ajouté au fichier « SSP.txt » après l’exécution du script :
#!/bin/bash
echo "Avant l’ajout au fichier"
cat SSP.txt
echo "Apprentissage de script bash" >> SSP.txt
echo "Après l’ajout au fichier"
cat SSP.txt
Dans cet exemple, nous allons écrire un script bash qui affichera tous les fichiers dans le répertoire
actuel avec le nombre de ligne.
#!/usr/bin/env bash
for F in *
do
if [[ -f $F ]]
then
echo $F: $(cat $F | wc -l)
fi
done
Dans cet exemple, nous avons utilisé une boucle for pour obtenir tous les fichiers du répertoire,
puis utilisé la commande cat combinée à wc pour compter les lignes.
Dans notre exemple suivant, le script Linux bash trouve le nombre de fichiers ou de dossiers
présents à l’intérieur d’un répertoire donné. Il utilise la commande Linux find. Les utilisateurs
seront invités à entrer le nom du répertoire où ils souhaitent rechercher des fichiers à partir de la
ligne de commande.
16
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
#!/bin/bash
if [ -d "$@" ]; then
echo "Les fichiers trouvés : $(find "$@" -type f | wc -l)"
echo "Les dossiers trouvés : $(find "$@" -type d | wc -l)"
else
echo "[ERREUR] Veuillez réessayer."
exit 1
fi
Vous pouvez obtenir la date et la valeur d’heure du système actuelles à l’aide de la commande
date. Chaque partie de la valeur de la date et de l’heure peut être formatée en utilisant 'Y', 'm', 'd',
'H', 'M' et 'S'. Créez un nouveau fichier nommé formatage_date.sh et ajoutez le code suivant aux
valeurs distinctes jour, mois, année, heure, minute et seconde :
#!/bin/bash
Annee='date +%Y'
Mois='date +%m'
Jour='date +%d'
Heure='date +%H'
Minute='date +%M'
Seconde='date +%S'
echo 'date'
echo "La Date actuelle est : $Jour-$Mois-$Annee"
echo "L’heure actuelle est : $Heure:$Minute:$Seconde"
wait est une commande intégrée de Linux qui permet au système d’attendre avant de terminer
n’importe quel processus en cours d’exécution. La commande d’attente est utilisée avec un id de
processus particulier ou un id de tâche. Si aucun id de processus ou id de tâche n’est donné avec
la commande d’attente alors il attendra que tous les processus enfants actuels se terminent et
retournent l’état de sortie. Créez un fichier nommé wait_example.sh et ajoutez le script suivant :
#!/bin/bash
echo "La commande Wait " &
process_id=$!
wait $process_id
echo "Processus terminé avec le status $?"
Lorsque vous souhaitez mettre en pause l’exécution de n’importe quelle commande pendant une
période de temps spécifique, vous pouvez utiliser la commande sleep. Vous pouvez définir la
valeur du délai par secondes(s), minutes(m), heures(h) et jours(d). Créez un fichier nommé «
exemple_sleep.sh » et ajoutez le script suivant.
NB : Ce script attendra 5 secondes après la l’exécution.
17
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
#!/bin/bash
Dans cet exemple nous verrons comment savoir si un utilisateur est root ou non à partir de scripts
Linux bash :
#!/bin/bash
ROOT_UID=0
Une chose intéressante, vous pouvez également envoyer des e-mails à partir de scripts bash. Dans
l’exemple simple suivant, nous verrons comment le faire :
#!/bin/bash
destinataire=”mon_mail@esgis.tg”
objet=”Salutations”
message=”Bonjour M. TOSSOU \n Comment allez-vous ?”
`mail -s $objet $destinataire <<< $message`
Il enverra un e-mail au destinataire contenant le sujet et le message donné. Pour ceux qui pourrait
avoir des soucis avec l’installation de la commande mail, une piste de solution se trouve ici.
Ce script supprimera tous les fichiers journaux présents à l’intérieur de votre répertoire /var/log.
Vous pouvez ajouter plus de variables pour contenir d’autres répertoires de journaux et les
nettoyer ainsi.
#!/bin/bash
LOG_DIR=/var/log
cd $LOG_DIR
18
TOSSOU Kodjo Elom Francis K.
LA GESTION DES SCRIPTS SHELL
#!/bin/bash
date
echo "uptime:"
uptime
echo "Actuellement connecté(s):"
w
echo "--------------------"
echo "Dernière(s) connexion(s):"
last -a | head -3
echo "--------------------"
echo "Utilisation du Disque et de la mémoire :"
df -h | xargs | awk '{print "Disque Libre/total : " $11 " / " $9}'
free -m | xargs | awk '{print "Mémoire Libre/total : " $17 " / " $8 "
MB"}'
echo "--------------------"
Ce petit script shell Linux améliore et nettoie le système automatiquement au lieu de le faire
manuellement.
#!/bin/bash
apt-get update
apt-get -y upgrade
apt-get -y autoremove
apt-get autoclean
6 Conclusion
Les scripts shell Linux peuvent être utiles. Des tâches complexes exécutées de manière appropriée
peuvent augmenter votre productivité dans une large mesure et vous aider à résoudre les
problèmes en un rien de temps. De plus, il n’y a pas de limite à son évolutivité. En tant
qu’administrateur système Linux, je vous recommande fortement de maîtriser ces exemples de
script bash.
19
TOSSOU Kodjo Elom Francis K.