0% ont trouvé ce document utile (0 vote)
21 vues178 pages

Chapitre 4 ScriptSHELL Linux

shell linux

Transféré par

Ons Zaghbouni
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)
21 vues178 pages

Chapitre 4 ScriptSHELL Linux

shell linux

Transféré par

Ons Zaghbouni
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

Programmation système et réseaux

Chapitre 4: Programmation SHELL sous Linux

ISSAT Sousse, LSI-A2

Dr. Roua Jabla


[email protected]

2024-2025
Plan
Introduction

Initiation d’un script SHELL

Manipulation des variables

Opérations arithmétiques

Structures de contrôle

Tableaux

Fonctions

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 2


Introduction

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 3


Introduction

– SHELL a un double rôle, celui d’interpréteur de commandes mais


aussi un interpréteur d’un langage de programmation,

– Programmation SHELL est une combinaison de commandes au sein


d’un programme dans le but d’automatiser certaines tâches,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 4


Introduction

– Un programme SHELL est appelé « Script »,

– Un script est un fichier texte exécutable,

– Un script gère des variables, des commandes, des fonctions et des


structures de contrôle (boucles, ….),

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 5


Introduction

– Script SHELL:

• Fichier texte exécutable d’extension « .sh »,

• S’exécute comme une commande unique,

• Peut définir et utiliser des variables,

• Peut contenir une suite de commandes SHELL,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 6


Introduction

– Script SHELL:

• Peut contenir des structures conditionnelles et des boucles,

• Peut contenir des fonctions,

• Peut prendre des paramètres d'entrée,

• …

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 7


Initiation d’un script SHELL

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 8


Initiation d’un script SHELL
• Création des scripts

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 9


Création des scripts

– Pour créer un script SHELL, il faut ouvrir l’éditeur gedit en lui


donnant le nom de fichier à créer et son extension « .sh »,

gedit nom_script.sh

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 10


Création des scripts
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 11


Initiation d’un script SHELL
• En-tête des scripts

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 12


En-tête des scripts

– Pour indiquer qu'il s'agit bien d'un script et non pas d'un fichier texte
classique, la première ligne doit toujours commencer par le nom de
l'interpréteur de commandes :

#!/bin/nom-interpréteur

– Cette ligne s’appelle « shebang »,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 13


En-tête des scripts

#!/bin/bash
ou
#!/bin/sh

– La ligne « shebang » permet de lancer le bon interpréteur qui doit être


utilisé pour exécuter le script,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 14


Initiation d’un script SHELL
• Commentaires

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 15


Commentaires

– Pour écrire autant de lignes de commentaires que vous voulez, il faut


débuter la ligne par #,

– Le symbole # sert à indiquer une ligne de commentaire dans les


scripts,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 16


Initiation d’un script SHELL
• Exécution des scripts

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 17


Exécution des scripts

– Il existe 3 manières d’exécuter un script SHELL sous Linux,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 18


Exécution des scripts

1. nom-interpréteur nom_script.sh

• Appelle la commande de l'interpréteur désiré (bash, sh, ksh …) suivi du nom du


script,

• Peut-être utiliser avec n’importe quel SHELL disponible sur le système,

→ « bash mon_script.sh » va exécuter le script avec l'interpréteur « bash » même si le shebang spécifie
autre chose,
→ « sh mon_script.sh » va exécuter le script avec l'interpréteur « sh » même si le shebang spécifie autre
chose,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 19


Exécution des scripts

1. nom-interpréteur nom_script.sh

• Lance une copie du SHELL courant et lui fait exécuter le script,

• Peut-être utiliser avec les scripts non exécutables,

• Peut-être utiliser avec les scripts qui ont d'autorisation de lecture seulement,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 20


Exécution des scripts

1. nom-interpréteur nom_script.sh

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 21


Exécution des scripts

1. nom-interpréteur nom_script.sh

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 22


Exécution des scripts

2. . nom_script.sh

• Ne lance pas un nouveau SHELL mais exécute le script dans le SHELL courant,

• Permet de modifier des variables d’environnement du SHELL courant,

• Peut-être utiliser avec les scripts qui n'ont pas d'autorisation d'exécution,

• Peut-être utiliser avec les scripts qui ont d'autorisation de lecture seulement,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 23


Exécution des scripts

2. . nom_script.sh

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 24


Exécution des scripts

3. ./nom_script.sh

• C’est la manière la plus utilisée pour exécuter un script,

• Lance une copie du SHELL actuel et exécute le script,

• Nécessite le(s) droit(s) d’exécution « x » au script en tapant :


chmod [ua]+x nom_script.sh
ou
chmod 7xx nom_script.sh

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 25


Exécution des scripts

3. ./nom_script.sh

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 26


Initiation d’un script SHELL
• Entrées/Sorties

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 27


Commande echo

i. La commande echo dans un script est utilisée pour afficher des messages à
l’écran,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 28


Commande echo

ii. La commande echo est utilisée aussi pour afficher le contenu d’une
variable à l'écran,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 29


Commande echo

iii. La commande echo est utilisée aussi pour afficher une expression
composée de chaines de caractères et de variables,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 30


Commande printf

– La commande printf est utilisée pour afficher des messages à l’écran,

– La syntaxe de la commande printf est:

printf <format> <arguments>

– La commande printf permet d’écrire dans une fenêtre de terminal avec


un contrôle plus fin et plus d’options de formatage que la commande
echo,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 31


Commande printf

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 32


Commande printf

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 33


Commande printf
– Spécificateurs de format
1. \n permet de descendre à une nouvelle ligne « newline »,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 34


Commande printf
– Spécificateurs de format
2. %s permet d’afficher l’argument sous forme d’une chaine de caractères,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 35


Commande printf
– Spécificateurs de format
2. %s permet d’afficher l’argument sous forme d’une chaine de caractères,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 36


Commande printf
– Spécificateurs de format
3. %d permet d’afficher l’argument sous forme d’un entier,

→ Dans cet exemple, %s attend une chaîne de caractères et %d attend un entier,


→ La chaîne ‘first' et l'entier 3 sont des arguments qui remplacent respectivement %s et %d dans la
sortie,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 37


Commande printf
– Spécificateurs de format
3. %d permet d’afficher l’argument sous forme d’un entier,

→ Dans cet exemple, nous avons oublié de fournir un argument pour %d,
→ Par conséquent, printf utilise 0 comme valeur par défaut,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 38


Commande printf
– Spécificateurs de format
3. %d permet d’afficher l’argument sous forme d’un entier,

→ Dans cet exemple, nous avons fourni un argument sous forme de chaîne pour %d,
→ Par conséquent, printf utilise 0 comme valeur par défaut,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 39


Commande printf
– Spécificateurs de format
4. %f permet d’afficher l'argument sous forme de nombre à virgule flottante,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 40


Commande printf
– Spécificateurs de format
4. %f permet d’afficher l'argument sous forme de nombre à virgule flottante,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 41


Commande printf
– Spécificateurs de format
5. La largeur du champ, dans lequel l’argument doit être affiché, peut être fixé
entre les champs % et {s, d, f, …}
• %4s, %5d, %7.4f

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 42


Commande read

– La commande read lit la saisie d’un utilisateur à partir du canal


d’entrée standard (clavier) et stocke ces données dans des variables,

– Lorsque la commande read est traitée, SHELL attend une entrée de la


part de l’utilisateur,

read var

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 43


Commande read
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 44


Initiation d’un script SHELL
• Caractères spéciaux

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 45


Caractères spéciaux

Caractère Correspondance
# Démarre un commentaire
$ Indique le nom d'une variable
\ Échappe les caractères spéciaux
{} Ferme le nom de la variable
; Sépare les commandes sur une même ligne
||, &&, ! OR, AND et NO

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 46


Caractères spéciaux
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 47


Caractères spéciaux
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 48


Caractères spéciaux
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 49


Caractères spéciaux
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 50


Caractères spéciaux
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 51


Manipulation des variables
• Variables

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 52


Variables

– Comme dans n'importe quel langage de programmation, vous pouvez


utiliser des variables dans des scripts SHELL,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 53


Manipulation des variables
• Référencement des variables

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 54


Référencement des variables

– Pour référencer une variable, vous devez ajouter avant son nom le
symbole $

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 55


Référencement des variables

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 56


Manipulation des variables
• Types de variables

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 57


Types de variables

– Il existe deux types de variables que vous pouvez utiliser dans votre
script :

• Variables d'environnement,

• Variables définies par l'utilisateur,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 58


Types de variables
o Variables d’environnement
– Les variables d'environnement sont définies par le SHELL pour votre
usage,

– Les variables d'environnement stockent des configurations qui


peuvent être partagées sous Linux

– Pour savoir les variables d’environnement, vous pouvez utiliser la


commande printenv,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 59


Types de variables
o Variables d’environnement
– Il existe de nombreuses variables d'environnement:
Variable
SHELL Type du SHELL

BASH Nom du SHELL

BASH_VERSION Version du SHELL

PATH Chemin où trouver les commandes

HOSTNAME Nom de la machine

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 60


Types de variables
o Variables d’environnement
– Il existe de nombreuses variables d'environnement:
Variable
USER Utilisateur connecté sur la session

HOME Répertoire de connexion (équivaut à ~)

PWD Répertoire courant

RANDOM Entier aléatoire entre 0 et 32767

→ Toutes les variables d'environnement sont écrites en majuscules, vous pouvez donc déclarer vos
variables en minuscules pour faciliter la différenciation de vos variables des variables
d'environnement,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 61


Types de variables
oVariables d’environnement

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 62


Types de variables
o Variables utilisateur

– Une variable d’utilisateur est comme un espace réservé dans lequel


vous stockez une valeur pour une utilisation ultérieure dans votre
script,

var=valeur

– Une variable peut contenir un nombre, un caractère ou une chaîne de


caractères,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 63


Types de variables
o Variables utilisateur

– Le contenu d’une variable valeur doit être mis entre guillemet s’il
contient des espaces ou des caractères spéciaux,

var="Hello world"

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 64


Types de variables
o Variables utilisateur

– Règles pour les noms de variables:


• Les noms de variables doivent commencer par une lettre ou un trait de
soulignement,

• Le nombre peut être utilisé n'importe où ailleurs,

• Éviter les caractères spéciaux tels que @, #,%, $,

• Sensible à la casse,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 65


Types de variables
o Variables utilisateur

– Exemples
• Noms de variables autorisés
✓ Variable, Variable123, Variable-123, nom-variable, nom_variable, …

• Noms de variables non autorisés


× 1VARIABLE, %NAME, $myvar, VAR@NAME

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 66


Types de variables
o Variables utilisateur

– Pour effacer une variable définie par un utilisateur, vous devez utiliser
la commande unset,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 67


Manipulation des variables
• Guillemets

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 68


Guillemets

– Guillemets dactylographiques "Double Quotation"

• La chaîne enfermée est référencée,

• echo "$my_var" affiche la valeur de my_var,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 69


Guillemets

– Guillemets simples (Apostrophes) ‘Single Quotation’

• La chaîne enfermée est lue littéralement,

• echo ‘$my_var’ affiche $my_var,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 70


Guillemets

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 71


Guillemets

– `Backtick`(Accent Grave)

• La chaîne enfermé est exécutée comme commande,

• echo `pwd` affiche la sortie de la commande pwd,

→ Dans bash, vous pouvez également utiliser $(commande) au lieu de `commande`


pour exécuter une commande dans un script,
→ $(pwd) et `pwd` sont identiques,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 72


Guillemets

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 73


Activité
Consigne

– Créez un script «first_script.sh» qui


i. permet de compter le nombre des répertoires et fichiers dans votre
répertoire courant en utilisant les backticks,

ii. permet de compter le nombre des fichiers ordinaires dans votre répertoire
courant en utilisant $(),

Temps
– 5 min,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 74


Activité

Solution

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 75


Manipulation des variables
• Portée des variables

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 76


Portée des variables

– Par défaut, une variable n’est accessible que depuis le SHELL où elle a
été définie,
– En plus, un script ne partage pas ses variables,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 77


Portée des variables

– La commande export permet d’exporter une variable de manière à ce


que son contenu soit visible par les scripts et les autres SHELLS,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 78


Manipulation des variables
• Accolades

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 79


Accolades

– Les accolades permettent d’entourer une variable pour effectuer


certains traitements lors de l'extraction de sa valeur,

– Les différents traitements peuvent être classés en 4 groupes:

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 80


Accolades
i. 1er groupe

Syntaxe Correspondance

Si « var » est affectée, on l’utilise,

${var:-val} Si « var » n'est pas affectée ou inexistante, elle sera remplacée par « val »
mais sans affectation,

→ val est une "valeur par défaut«

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 81


Accolades

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 82


Accolades
ii. 2ème groupe

Syntaxe Correspondance

Si « var » est affectée, on l’utilise,


${var:=val}
Si « var » n'est pas affectée ou inexistante, elle sera affectée par cette
« val »,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 83


Accolades

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 84


Accolades
iii. 3ème groupe

Syntaxe Correspondance

Si « var » est affectée, « val » prendra sa place,

${var:+val} Si « var » n'est pas affectée ou inexistante, une chaîne vide prend sa
place,

→ ${var:+val} est remplacé par rien,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 85


Accolades

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 86


Accolades
iv. 4ème groupe
Syntaxe Correspondance

Si « var » est affectée, on l’utilise,

${var:?’texte’} Si « var » n'est pas affectée ou inexistante, le script sera interrompu et le


« texte » s'affichera,

→ Si « texte » est absent, un message d'erreur standard sera affiché,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 87


Accolades

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 88


Accolades

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 89


Manipulation des variables
• Extraction de sous-chaînes

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 90


Extraction de sous-chaînes

– Certains traitements peuvent être effectués lors de l’extraction des


valeurs des variables:

• ${#var}: longueur de la chaîne de cette variable,

• ${var:début}: une sous-chaîne de cette variable commençant au caractère


d’indice début,

• ${var:début:n}: une sous-chaîne de cette variable commençant au caractère


d’indice début et de longueur n,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 91


Activité
Consigne
– Complétez le script suivant:

Temps
– 5 min,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 92


Activité
Solution

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 93


Extraction de sous-chaînes

– Certains traitements peuvent être effectués lors de l’extraction des


valeurs des variables:

• ${var/motif/remp}: la première occurrence de « motif » sera remplacée par


« remp »,

• ${var//motif/remp}: toutes les occurrences de « motif » seront remplacées par


« remp »,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 94


Extraction de sous-chaînes

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 95


Opérations arithmétiques

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 96


Opérations arithmétiques
• Variables entières
– Il y a différentes opérations numériques peuvent être effectuées sur les
variables entières:
Opération Opérateur
Addition +
Soustraction -
Multiplication *
Division /
Modulo (mod) % (Reste de la division euclidienne)
Exponentiation **

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 97


Opérations arithmétiques
• Variables entières
– Ces opérations arithmétiques peuvent être effectuées en utilisant:

▪ Les $((···)) ou $[···]

✓ Affecter une variable numérique : $((x=4))

✓ Faire des calculs : $(($a+$b)) ou $[$a*$b]

✓ Evaluer les tests numériques : $(( (x=x-1) < 0 ))

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 98


Opérations arithmétiques
• Variables entières

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 99


Manipulation des variables
• Variables des paramètres

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 100


Variables des paramètres

– Des variables des paramètres, appelées aussi arguments, sont utilisées


pour fournir un moyen de saisir des données dans un script lorsqu'il
est invoqué depuis le SHELL,

– Les variables des paramètres ou les arguments spécifient les données à


utiliser comme valeurs pour les variables dans les scripts,

– Il existe 10 arguments allant de $0 à $9,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 101


Variables des paramètres
Argument Correspondance
# Nombre d’arguments
0 Nom du script
n (1 – 9) Nième arguments
* Tous les arguments au format "$1 $2 $3 ..."
→ Retourne une seule chaîne regroupant tous les paramètres passés au script,
Tous les arguments sous forme d'éléments distincts "$1" "$2" "$3" ...
@ → Retourne autant de chaînes que de paramètres, chacun étant comme encadré par des "..." ,
→ C'est ça qu'il faut utiliser si on fait une boucle,
$ Identifiant du processus (PID) courant
→ PID du script courant
! PID du dernier processus lancé
→ PID du processus le plus récent

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 102


Variables des paramètres

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 103


Variables des paramètres

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 104


Variables des paramètres

– La commande shift permet d’effectuer un décalage de n variables des


paramètres,
shift n

– Un simple appel de shift décale tous les paramètres d’une position en


supprimant le premier: $2 devient $1, $3 devient $2 et etc.,

– $#, $* et $@ sont redéfinis en conséquence,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 105


Variables des paramètres

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 106


Variables des paramètres

– À l’intérieur d’un script, vous pouvez réaffecter les n paramètres ($n),

– La commande set permet de redéfinir le contenu des variables des


paramètres,
set newParam_1 newParam_2 … newParam_n

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 107


Variables des paramètres

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 108


Activité
Consigne
– Créez un script «arguments_script.sh» avec deux arguments qui
i. permet de rechercher la présence d’un mot donné en argument
(arg2) dans tous les fichiers ordinaires du répertoire spécifié en
argument (arg1),
ii. permet aussi de retourner le nombre d’occurrence du mot donné
(arg2),

Temps
– 5 min,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 109


Activité

Solution i.

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 110


Activité

Solution i.

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 111


Activité

Solution ii.

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 112


Structure de contrôle

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 113


Structure de contrôle

– Le langage de script Shell exécute les commandes dans une séquence


similaire aux langages de programmation tel que C,

– Les structures de contrôle peuvent modifier cet ordre séquentiel des


commandes,

– Les structures de contrôle disponibles dans « bash »:


• Conditions : if/then, case
• Boucles : for, while, until

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 114


Structure de contrôle
• Conditions

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 115


Conditions simples

– if/then permet l'exécution d'instruction sous certaines conditions,

if [ condition 1 ]
then
some commands
elif [ condition 2 ]; then
some commands
else
some commands
fi

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 116


Conditions simples
• Conditions sur les chaînes de caractères (string)
Opération Syntaxe bash Correspondance
Égal à (equal to) if [ $s1 == $s2 ] s1 et s2 sont identiques

Pas égal à (not equal to) if [ $s1 != $s2 ] s1 et s2 sont différentes

Longueur nulle (zero length) if [ –z $s1 ] Longueur de s1 est nulle


→ s1 est vide

Longueur non nulle (non zero length) if [ –n $a ] Longueur de s1 est non nulle
→ s1 n’est pas vide

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 117


Conditions simples
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 118


Conditions simples
• Conditions sur les nombres

Opération sur les nombres Syntaxe bash Correspondance


Égal à (equal to) if [ $n1 –eq $n2 ] $n1 = $n2
Pas égal à (not equal to) if [ $n1 –ne $n2 ] $n1 ≠ $n2
Plus grand que (greater than) if [ $n1 –gt $n2 ] $n1 > $n2
Plus grand ou égal à if [ $n1 –ge $n2 ] $n1 >= $n2
Inférieur à (less than) if [ $n1 –lt $n2 ] $n1 < $n2
Inférieur ou égal à if [ $n1 –le $n2 ] $n1 =< $n2

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 119


Conditions simples
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 120


Conditions simples
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 121


Conditions simples
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 122


Conditions simples
• Conditions sur les fichiers

Opération sur les fichiers Syntaxe bash


Si nom est un fichier ou le répertoire existant if [ –e nom ]
Si nom est un fichier ordinaire if [ –f nom ]
Si nom est un répertoire if [ –d nom ]
Si nom est un lien symbolique if [ –L nom ]
Si nom n'est pas de taille nulle ( non vide) if [ –s nom ]

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 123


Conditions simples
• Conditions sur les fichiers

Opération sur les fichiers Syntaxe bash


Si nom est accessible en lecture if [ –r nom ]
Si nom est accessible en écriture if [ –w nom ]
Si nom est un fichier exécutable ou un répertoire accessible if [ –x nom ]
Si nom1 et nom2 existent et si nom1 et nom2 sont liés if [ nom1 -ef nom2 ]
Si nom1 et nom2 existent et si nom1 est plus récent que nom2 if [ nom1 -nt nom2 ]
Si nom1 et nom2 existent et si nom1 est plus ancien que nom2 if [ nom1 -ot nom2 ]

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 124


Conditions simples
• Conditions par opérateurs logiques

Opérateur Syntaxe bash


NOT if [ ! –e nom ]
AND if [ $a –eq $b ] && [ $x –gt $y ]
OR if [[ $a –eq $b || $a –gt $b ]]

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 125


Conditions simples
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 126


Conditions simples
• Exemple

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 127


Conditions multiples

– case est une structure de contrôle utilisée lorsqu'une décision doit


être prise contre plusieurs choix,

– case est une bonne alternative à l'instruction if/then,

– case aide à simplifier l’instruction if/then imbriquée,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 128


Conditions multiples
case value in

"condition1")
cmd1;;

"condition2")
cmd2;;


esac

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 129


Conditions multiples

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 130


Structures de contrôle
• Boucles

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 131


Boucles

– Une boucle est un bloc de code qui itère une liste de commandes tant
que la condition de contrôle de la boucle est vraie,

– Les structures de boucles disponibles dans « bash »: for, while and


until,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 132


Boucles
• Boucle for

– Pour la boucle for, il ne s’agit pas de fixer une valeur de départ et une
valeur de fin contrôlant le nombre d’itérations mais d’une répétition
d’un traitement pour des valeurs différentes d’une variable,

for var in list


do
some commands
done

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 133


Boucles
• Boucle for
– La boucle for permet de parcourir par exemple:
• Les variables des paramètres
for param in “$@”
do
some commands
done
• Les fichiers
for file in *.txt
do
some commands
done

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 134


Boucles
• Boucle for

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 135


Boucles
• Boucle for

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 136


Boucles
• Boucle while

– La boucle while teste une condition au sommet d'une boucle et


continue d’exécuter une suite de commandes tant que cette condition
est vraie,

while [ conditions ]
do
some commands
done

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 137


Boucles
• Boucle while

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 138


Boucles
• Boucle until

– La boucle until teste une condition au sommet d’une boucle et continue à


répéter une séquence de commandes tant que cette condition est fausse, c'est
à dire quelle fonctionne à l'inverse de la boucle while,

until [ condition is true ]


do
some commands
done

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 139


Boucles
• Boucle until

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 140


Structures de contrôle
• Contrôle de boucles

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 141


Contrôle de boucles
• Débranchement « break »
– Il est possible de sortir d’une boucle sans effectuer toutes les itérations
prévues en utilisant la commande break,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 142


Contrôle de boucles
• Débranchement « continue »

– Il est possible de forcer le passage immédiat à l'itération suivante dans


une boucle en utilisant la commande continue,

– Contrairement à la commande break, la commande continue permet


de sauter vers la fin d'une boucle sans la quitter forcément,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 143


Contrôle de boucles
• Débranchement continue

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 144


Activité
Consigne
– Écrivez le script «fileCheck_script.sh» qui permet
d’identifier le type du fichier (ordinaire ou symbolique)
passé en paramètre,
Indication:
i. Proposez deux manières différentes,
ii. Pensez à vérifier la présence de paramètre,
iii. Pensez à vérifier l’existence du fichier passé en paramètre,
Temps
– 10 min,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 145


Activité
Solution 1

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 146


Activité
Solution 2

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 147


Tableaux

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 148


Tableaux

– Deux types de tableaux sont prises en charge:

• Les tableaux indicés (classiques)


→ Éléments indexés par une valeur numérique,

• Les tableaux associatifs


→ Éléments indexés par une chaîne de caractères,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 149


Tableaux
• Déclaration des tableaux

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 150


Déclaration des tableaux

– Un tableau peut être crée de façon explicite en utilisant declare, suivi de


l’option –a pour un tableau indicé ou –A pour un tableau associatif,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 151


Déclaration des tableaux
– La déclaration d’un tableau indicé peut se faire simplement par initialisation, en
fournissant ses éléments entre parenthèses:

declare –a tableauIndicé=("un" "deux" "trois")

– Les indices sont ici assignés automatiquement, en commençant par « 0 » (zéro),

– Un tableau indicé peut être initialiser avec des indices imposés:

declare –a tableauIndicé=([1]="un" [2]="deux" [3]="trois")

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 152


Déclaration des tableaux

– La déclaration d’un tableau associatif peut se faire de la même façon,


mais un indice (clé) doit être précisé pour chaque élément:

declare –A tableauAssociatif=([‘one’]="un" [‘two’]="deux" [‘three’]="trois")

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 153


Tableaux
• Affichage et indexation des tableaux

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 154


Affichage et indexation des tableaux
• Affichage

– L’affichage d’un tableau se fait avec la syntaxe:

${tab[*]}
ou
${tab[@]}

→ La différence entre * et @ est identique à celle entre les variables des paramètres $* et
$@,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 155


Affichage et indexation des tableaux
• Affichage

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 156


Affichage et indexation des tableaux
• Affichage

– Il est possible d’obtenir la liste des indices (clés) d’un tableau à l’aide
de la syntaxe:
${!tab[@]}

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 157


Affichage et indexation des tableaux
• Affichage

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 158


Affichage et indexation des tableaux
• Affichage

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 159


Affichage et indexation des tableaux
• Indexation

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 160


Tableaux
• Longueur et traversée des tableaux

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 161


Longueur et traversée des tableaux

– Il est possible de savoir la longueur d’un tableau à l’aide de la syntaxe:


${#tab[*]}
ou
${#tab[@]}
– Il est possible de traverser un tableau à l’aide de la syntaxe:
for i in ${tab[@]}

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 162


Tableaux
• Modification d’un élément

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 163


Modification d’un élément

– L’initialisation d’un élément du tableau peut se faire de la manière


suivante:
tab[indice]=valeur

– Si le tableau tab n’existe pas, il sera créé comme un tableau indicé par
défaut,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 164


Modification d’un élément

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 165


Modification d’un élément

– La suppression d’un élément du tableau peut se faire en utilisant la


commande unset:
unset tab[indice]

– La commande unset permet aussi de détruire tout un tableau, en lui


passant son nom, nom[*] ou nom[@]

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 166


Fonctions

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 167


Fonctions

– Une fonction se comporte comme un script,

– Les deux ont une entrée standard et une sortie standard,

– La façon d’accéder aux paramètres sont les mêmes,

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 168


Fonction
• Déclaration des fonctions

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 169


Déclaration des fonctions

– La déclaration des fonctions dans un script se fait selon les 2 syntaxes suivantes:

function Nom_Func Nom_Func ()


{ {
instructions … instructions …
} }

– L’appel de la fonction se fait avec cette syntaxe:

Nom_Func params

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 170


Fonction
• Paramètres des fonctions

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 171


Paramètres des fonctions
– Des paramètres peuvent être transmis au moment de l'appel de la
fonction,
– Tous les paramètres passés lors de l’appel seront utilisés pour la
lecture de ces valeurs,

Correspondance
@ Le tableau de tous les paramètres
* Une chaine de caractères qui contient tous les paramètres
# Le nombre de paramètres

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 172


Paramètres des fonctions

function Nom_Func {
for i in “$@”
do
echo $i
done
}

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 173


Paramètres des fonctions
– Accéder aux différents paramètres passés lors de l’appel par leur
numéro:

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 174


Fonction
• Variables des fonctions

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 175


Variables des fonctions

– Par défaut, toutes les variables sont globales dans le script,

– Pour déclarer une variable locale, vous pouvez utiliser local,

local nom_var=valeur

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 176


Variables des fonctions

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 177


Fin

Dr. Roua Jabla LSI-A2 Programmation système et réseaux 178

Vous aimerez peut-être aussi