Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation...

51
Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe Roberge - Mai 2014

Transcript of Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation...

Page 1: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Systèmes d’exploitation et programmation de systèmes

-GPA435-

Cours #4: Éléments de programmation (Partie 1)

Enseignant: Jean-Philippe Roberge

Jean-Philippe Roberge - Mai 2014

Page 2: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Planification du cours #4

Petite révision du cours #3: Entrée/sortie standard, redirections et tuyaux Exécution en arrière-plan Regroupement et séparation des commandes Fichiers de commandes Le cas de la Fork Bomb !

Théorie du cours #4: Substitution de variables et de commandes Paramètres du shell Lecture et affichage Décision et bouclage

2Jean-Philippe Roberge - Mai 2014

Page 3: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Révision du cours #3 (1)

3

Au niveau des systèmes UNIX / Linux, plusieurs interpréteurs ont vu le jour!

Tableau tiré intégralement de http://bash.leyan.org/

Page 4: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

4

Concernant l’entrée et la sortie standard: Entrée standard Elle est normalement

attachée au clavier Elle possède un numéro de descripteur égal

à 0 Sortie standard Elle est normalement

attachée à l’écran Elle possède un numéro de descripteur

égal à 1 Erreur standard Elle est normalement

attachée à l’écran Elle possède un numéro de descripteur

égal à 2

Révision du cours #3 (2)

Tableau tiré intégralement de http://bash.leyan.org/

Clavier

C o m m an d e

Ent

rée

stan

dard

Sans red irection

Clavier

C o m m an d e

Fichiers

Fichiers

Term inal

Sort

ie sta

ndar

d

Term inal

E ntrée et sortiestand ard red irigées

< >

Page 5: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

5

Redirection de l’entrée et de la sortie standard:

cat < FichierEntree > FichierSortiecat < FichierEntree > FichierSortie

Révision du cours #3 (3)

Rediriger la sortie vers un fichier écrase le contenu du fichier de sortie.

Utiliser la concaténation pour préserver le contenu du fichier de sortie:

cat < toto.txt >> FichierSortiecat < toto.txt >> FichierSortieLa sortie de la commande La sortie de la commande catcat est est ajoutée à la fin du fichier ajoutée à la fin du fichier FichierSortieFichierSortie

cat < entree.txt > sortie.txt 2> erreur.txtcat < entree.txt > sortie.txt 2> erreur.txt

Les messages d ’erreur de la commande Les messages d ’erreur de la commande cat cat seront enregistrés dans ce fichierseront enregistrés dans ce fichier

Page 6: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

6

Tuyaux brancher la sortie standard d’une commande à l’entrée

standard d’une autre commande.

cmd1 cmd2

C o m m an de C o m m an de| (tuyau)

So rtiestan d ard

E n tréestan d ard

Révision du cours #3 (4)

Exemple:

cat document.txt | tr abc ABC > traduit.txtcat document.txt | tr abc ABC > traduit.txt

Page 7: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

7

Lancer les commandes en arrière-plan:

commande [-options] [paramètre] commande [-options] [paramètre] &&

Symbole indiquant une exécution en Symbole indiquant une exécution en arrière-plan d’une commandearrière-plan d’une commande

Révision du cours #3 (5)

Un cas:

cat passwd.dat | sort > sortie.txt &cat passwd.dat | sort > sortie.txt &

Attention aux entrées-sorties des commandes exécutées en arrière-plan !!! Exécution séquentielle d’une ligne de commandes par regroupement:

(cmd1 ; cmd2) ; cmd3(cmd1 ; cmd2) ; cmd3

(cmd1 ; cmd2) & cmd3(cmd1 ; cmd2) & cmd3

Plusieurs Plusieurs combinaisons sont combinaisons sont possiblespossibles

Page 8: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

8

Exemple:

Quelle sera la sortie de ces Quelle sera la sortie de ces deux commandes ?deux commandes ?

Commandes entre parenthèses sont exécutées par Commandes entre parenthèses sont exécutées par un interpréteur enfant.un interpréteur enfant.

Révision du cours #3 (6)

I n terp réteurd e

co m m an de

I n terp réteurd e

co m m an de

P aren t E n fan tE x écutio n d es co m m an d es regro up ées

C réatio n d 'un n o uv eau in terp réteur

F in d e l'ex écutio n d es co m m an d es regro up éesD estructio n d u n o uv eau in terp réteur

Page 9: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

9

Conditions d’un fichier de commande:• contient des commandes et instructions légales de Bourne

shell;

• fichier est lisible et/ou exécutable par le Bourne shell.

Exécution d’un fichier de commande:• sh FichierCommande

• contient à la première ligne du fichier la directive:

#!/bin/sh

Démonstration de la procédureDémonstration de la procédure

Révision du cours #3 (7)

Page 10: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

10

Variables prédéfinies:

Variable Signification

HOME Répertoire de travail de l’utilisateur.

PATH Chemins de fouille pour trouver une commande, un programme. Leschemins sont séparés par le caractère :.

MAIL Chemin indiquant la boîte de courriers de l’utilisateur.

PS1 Le caractère représentant le curseur. Par défaut, le caractère $ joue lerôle de curseur.

PS2 Lorsqu’une commande s’étend sur plus d’une ligne, l’interpréteur decommande affiche un second caractère pour indiquer qu’il fautcontinuer l’entrée. Par défaut c’est le caractère > qui est contenu danscette variable.

IFS Les caractères qui jouent le rôle de séparateur des commandes. En plusdes caractères espace et TAB, l’interpréteur considère les caractèrescontenus dans IFS comme séparateurs supplémentaires.

CDPATH Le contenu de cette variable modifie le comportement de la commandecd(1). Voir le manuel en-ligne pour les détails de cette commande.

TZ Cette variable indique la zone horaire (Time Zone) utilisée.

Révision du cours #3 (8)

Page 11: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

11

Variables prédéfinies (suite):

Variable Signification

$* Contient les paramètres entrées dans la ligne de commandes lors del’invocation du fichier de commandes.

$0 Nom du fichier de commande.

$n Valeur du ne paramètre de la ligne de commande.

$* Le contenu de la ligne de commande.

$# Le nombre de paramètres dans la ligne de commandes lors del’invocation du fichier de commandes.

$? L’état de terminaison (un numéro) de la dernière commande exécutée.

$$ Le numéro du processus PID correspondant à l’interpréteur decommande.

$! Le numéro du processus PID correspondant à la dernière tâcheexécutant en arrière-plan.

Révision du cours #3 (9)

Page 12: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

12

Transmettre une variable à un interpréteur enfant:• export(1)

Exemple d’exportation d’une variable:

Variable Variable REPERTOIREREPERTOIRE n’est pas exportée et elle n’est pas n’est pas exportée et elle n’est pas disponible dans les interpréteurs enfants.disponible dans les interpréteurs enfants.

Révision du cours #3 (10)

Page 13: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

13

Révision du cours #3 (11)

Comment faire « planter » un système d’exploitation Linux à l’aide de l’interpréteur de commandes ? En créant un processus

qui créé récursivement des processus…

C’est-à-dire:

Démonstration de la procédureDémonstration de la procédure

http://www.junauza.com/2008/11/7-deadly-linux-commands.html ; http://www.howtogeek.com/125157/8-deadly-commands-you-should-never-run-on-linux/

Page 14: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Jean-Philippe Roberge - Mai 201414

Cours #4

Page 15: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Une variable est identifiée par son Une variable est identifiée par son nom.nom.

Le contenu de la variableLe contenu de la variable• Une variable est identifiée par son nom.Une variable est identifiée par son nom.• Le contenu de la variable est identifié par le Le contenu de la variable est identifié par le

symbole symbole $$ placé devant le nom. placé devant le nom. Par exemple:Par exemple:

15

GPA435GPA435 $GPA435$GPA435

Nom de la variable

Contenu de la variable

Substitution de variable (1)

15

Page 16: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

L’interpréteur de commande réalisera L’interpréteur de commande réalisera la substitution du contenu d’une la substitution du contenu d’une variable lorsqu’il rencontre le symbole variable lorsqu’il rencontre le symbole $$ suivi d’un nom de variable. suivi d’un nom de variable.

Deux résultats possibles:Deux résultats possibles:• Substitution du contenuSubstitution du contenu

o Si la variable est définie et son contenu est non nul.Si la variable est définie et son contenu est non nul.• Substitution videSubstitution vide

o Si la variable n’est pas définie ou son contenu est nul.Si la variable n’est pas définie ou son contenu est nul.

16

Lorsqu’une variable est vide (sans aucune donnée) alors son contenu est nul

Substitution de variable (2)

16

Page 17: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Exemple de substitution des variablesExemple de substitution des variables

Mêmerésultat

Substitution de variable (3)

17

Page 18: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Il est possible d’assigner le résultat Il est possible d’assigner le résultat d’une ligne de commandes à une d’une ligne de commandes à une variable.variable.

Pour ce faire, entourer les commandes Pour ce faire, entourer les commandes par les caractères par les caractères ` `` ` (accents grave). (accents grave).

Voici la substitution des commandes à Voici la substitution des commandes à l’œuvre:l’œuvre:

18

Note 1: le code \n signifie afficher une nouvelle ligne.Note 2: le caractère \ précédé et suivi du caractère espace indique la continuation de la ligne de commande à la ligne suivante.

Substitution de variable (4)

18

Page 19: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Paramètres de positionParamètres de position

commande param1 param2 param2 param4commande param1 param2 param2 param4

19

Il s’agit du nom de la commande. Le nom de la commande est représenté par le paramètre de position $0.

Ce sont des paramètres de la commande. Dans l’interpréteur de commande, le contenu de ces paramètres est représenté par:

$1, $2, $3 jusqu’à $9

Paramètres d’une commande (1)

19

Page 20: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Paramètres de positionParamètres de position

20

$0 ls$1 -lg

$2 Downloads

$0 cp$1 Downloads/gpa435_ch5.pptx$2 Downloads/GPA435_CH5.pptx

$0 ls$1 -l$2 Downloads

Paramètres d’une commande (2)

20

Page 21: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Exemple d’utilisationExemple d’utilisation

21

Paramètres d’une commande (3)

21

Page 22: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Paramètres de positionParamètres de position• Nous pouvons manipuler les paramètres de Nous pouvons manipuler les paramètres de

position:position:o Le décalage vers la gauche à l’aide de Le décalage vers la gauche à l’aide de shiftshift

22

#!/bin/bash# Nom du programme: decalage# decalage: démontrer l'utilisation de shift pour décalage les paramètres# de position vers la gauche

echo "La ligne de commande est: $@"echo "Paramètre de position 1: $1"shiftecho "Paramètre de position 1: $1"shiftecho "Paramètre de position 1: $1"shiftecho "Paramètre de position 1: $1"

Décaler à gauche d’une position

Paramètres d’une commande (4)

22

Page 23: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Paramètres de positionParamètres de position• Nous pouvons manipuler les paramètres de Nous pouvons manipuler les paramètres de

position:position:o Le décalage vers la gauche à l’aide de Le décalage vers la gauche à l’aide de shiftshift

23

Résultat: Les commandes shift ont placé tour à tour les paramètres de position B, c et d dans la variable $1.

Paramètres d’une commande (5)

23

Page 24: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Paramètres de positionParamètres de position• Symboles associésSymboles associés

24

Symbole Signification

$0$0 Nom de la commandeNom de la commande

$1 $1 à $9à $9 Contenu des paramètres de position de la Contenu des paramètres de position de la commandecommande

$$$$ Numéro de processus (PID) de l’interpréteur de Numéro de processus (PID) de l’interpréteur de commande qui exécute la commandecommande qui exécute la commande

$#$# Nombre de paramètres de positionNombre de paramètres de position

$@$@ Contenu de la ligne de commandeContenu de la ligne de commande

Paramètres d’une commande (6)

24

Page 25: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Ces variables sont prédéfinies par Ces variables sont prédéfinies par l’interpréteur de commande et sont l’interpréteur de commande et sont disponibles pour les programmes disponibles pour les programmes utilisateursutilisateurs

25

Variables Signification

$?$? L’état de terminaison de la dernière commande L’état de terminaison de la dernière commande exécutéeexécutée

$HOME$HOME Le chemin de répertoire menant vers le dossier de Le chemin de répertoire menant vers le dossier de l’utilisateurl’utilisateur

$PATH$PATH Le chemin de fouille pour les programmes et Le chemin de fouille pour les programmes et commandescommandes

$USER$USER Le nom d’utilisateurLe nom d’utilisateur

$$HOSTNAMEHOSTNAME Le nom de l’ordinateurLe nom de l’ordinateur

$OSTYPE$OSTYPE Le nom du système d’exploitationLe nom du système d’exploitation

$UID$UID Le numéro de l’utilisateurLe numéro de l’utilisateur

$*$* Contenu de la ligne de commandeContenu de la ligne de commande

Variable de l’interpréteur

25

Page 26: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

La commande read(1) réalise la lecture La commande read(1) réalise la lecture des données des données à partir de l’entrée à partir de l’entrée standard:standard:read var1 var2 var3read var1 var2 var3

o Lecture de l’entrée standard et place les données Lecture de l’entrée standard et place les données dans les variables dans les variables var1var1, , var2var2 et et var3var3..

o La séparation des données en champs est réalisée par La séparation des données en champs est réalisée par l’interpréteur de commande à l’aide de la variable l’interpréteur de commande à l’aide de la variable IFSIFS (Internal Field Separator).(Internal Field Separator).

o IFS contient habituellement les caractères espace, tab IFS contient habituellement les caractères espace, tab et ENTER.et ENTER.

26

voici une-ligne de données !

Il y a 5 champs

var1 var2 var3 var3

var3

Lecture et affichage (1)

26

Page 27: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

La commande La commande read(1)read(1)

27

Note 1: read(1) utilise les caractères contenus dans la variable IFS pour réaliser la séparation des champs.Note 2: read(1) élimine automatiquement les séparateurs de champs de la ligne de données.Note 3: read(1) place le contenu des champs dans les paramètres de position. Le 1er champs dans le 1er paramètre de position. Le 2e champs dans le 2e paramètre de position et ainsi de suite. Pour les champs excédentaires, ils seront placés dans le dernier paramètre de position.

Lecture et affichage (2)

27

Page 28: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

La commande La commande read(1)read(1)

28

La commande read placera les données lues dans les variables:

POSITION_1, POSITION_2, POSITION_3 et LE_RESTE_DES_EQUIPES

ensuite la commande echo affichera le contenu des variables à la sortie standard.

Lecture et affichage (3)

28

Page 29: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

La commande La commande read(1)read(1)

29

Observer bien le contenu de la dernière variableLE_RESTE_DES_EQUIPES

Lecture et affichage (4)

29

Page 30: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

La commande echo(1) réalise La commande echo(1) réalise l’affichage à la sortie standard:l’affichage à la sortie standard:echo Allo tout le mondeecho Allo tout le mondeecho $var1 $var2 $var3echo $var1 $var2 $var3

o Affiche à la sortie standard le contenu des variables Affiche à la sortie standard le contenu des variables var1var1, , var2var2 et et var3var3..

echo -e $var1 $var2 $var3echo -e $var1 $var2 $var3o L’option –e permet l’introduction des codes de L’option –e permet l’introduction des codes de

contrôle d’affichagecontrôle d’affichage

30

\n nouvelle ligne\t tab\r return\b backspace\c continuer l’affichage sur la même ligne

Consulter man echo pour connaître tous les codes de contrôle acceptés par la commande echo.

Lecture et affichage (5)

30

Page 31: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

La commande echo(1) réalise La commande echo(1) réalise l’affichage à la sortie standard:l’affichage à la sortie standard:

31

\n nouvelle ligne\t tab\r return\b backspace\c continuer l’affichage sur la même ligne

Pourquoi ce résultat?Pourquoi ce résultat?

Lecture et affichage (6)

31

Page 32: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

La commande printf(1) réalise La commande printf(1) réalise l’affichage à la sortie standard:l’affichage à la sortie standard:printf printf ""Allo tout le monde\nAllo tout le monde\n""printf printf "%s\t%s\t%s\n" "%s\t%s\t%s\n" $var1 $var2 $var3$var1 $var2 $var3

o Affiche à la sortie standard le contenu de Affiche à la sortie standard le contenu de var1var1, suivi , suivi du code tabulation, suivi du contenu de du code tabulation, suivi du contenu de var2var2 , suivi du , suivi du code tabulation, suivi du contenu de code tabulation, suivi du contenu de var3var3 suivi du suivi du code nouvelle ligne.code nouvelle ligne.

o La chaîne La chaîne "%s\t%s\t%s\n""%s\t%s\t%s\n" est appelée chaîne de est appelée chaîne de formatage et elle accepte les mêmes formats que sa formatage et elle accepte les mêmes formats que sa contrepartie du langage C. En voici quelques contrepartie du langage C. En voici quelques exemples:exemples:

32

%s chaîne de caractères%d, %i nombre décimal signé%u nombre décimal non signé%f nombre en virgule flottant%c un caractère

Consulter man printf pour connaître tous les formatages acceptés par la commande printf.

Lecture et affichage (7)

32

Page 33: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Quelques exemplesQuelques exemples

33

Lecture et affichage (8)

33

Page 34: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction if – then - else - fiInstruction if – then - else - fi

34

#!/bin/bash# Nom du programme: affiche# affiche: démontrer l'utilisation des instructions if - then - else - fi

if [ $# = 0 ] # si la commande a été lancée sans aucun paramètre de position...then echo "Usage: affiche [-v] nom_fichier" 1>&2 echo " -v utilise more pour formater l'affichage" 1>&2

exit 1 # erreur alors donner le code de retour 1fi

if [ "$1" != "-v" ]; then cat "$1" # pas d'option "-v" alors c'est le nom du fichier à afficherelse if [ "$2" != "" ]; then cat "$2" | more # alors afficher le fichier avec formatage par more else echo "Nom du fichier à affiche est manquant" exit 1 # erreur alors donner le code de retour 1 fifiexit 0 # tout va bien alors donner le code de retour 0

Décision et bouclage (1)

34

Page 35: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Nous pouvons tester un ensemble de Nous pouvons tester un ensemble de conditions par des opérateurs logiques conditions par des opérateurs logiques et des options de l’instruction et des options de l’instruction ifif

35

#!/bin/bash# Nom du programme: iftest# iftest: démontrer l'utilisation des opérateurs logiques avec l'instruction if

# voir si le fichier suivant existe et ...NOMFICHIER="$HOME"/GPA435/chap6/afficheif [ -f "$NOMFICHIER" ]then # voir s'il possède les permissions en lecture ou en écriture mais pas d'exécution if [ \( -r "$NOMFICHIER" -o -w "$NOMFICHIER" \) -a ! -x "$NOMFICHIER" ]; then echo "$NOMFICHIER accessible en lecture ou en écriture seulement" else echo "$NOMFICHIER est exécutable" fielse echo "$NOMFICHIER n'existe pas"fi

Consulter man test ou les notes de cours chapitre 6 pour connaître les opérateurs logiques et options disponibles

Décision et bouclage (2)

35

Page 36: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction for - donefor - done• Cette instruction sert à boucler:Cette instruction sert à boucler:

o Sur les paramètres de position;Sur les paramètres de position;OUOUo Sur une liste de paramètres donnés directement dans Sur une liste de paramètres donnés directement dans

le programme.le programme.

• Attention! L’instruction Attention! L’instruction for – donefor – done ne ne ressemble pas à celle des langages classiques ressemble pas à celle des langages classiques (basic, C, MATLAB, etc.)(basic, C, MATLAB, etc.)

36

Décision et bouclage (3)

36

Page 37: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction for – donefor – done Bouclage sur les paramètres de positionBouclage sur les paramètres de position

37

#!/bin/bash# Nom du programme: fortest1# fortest1: montrer bouclage for - done sur les paramètres de position

# voir si les fichiers donnés à la ligne de commande existent...if [ $# -ne 0 ]; then # boucler sur les paramètres de position for NOMFICH do if [ -f "$NOMFICH" ] ; then printf "%s existe\n" "$NOMFICH" else printf "%s n'existe pas\n" "$NOMFICH" fi done exit 0else echo "Pas de paramètres de position ;(("fiexit 1

Variable qui recevra tour à tour les paramètres de position données à la ligne de commande

Décision et bouclage (4)

37

Page 38: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction for – donefor – done Bouclage sur les paramètres de positionBouclage sur les paramètres de position

38

Dans cet exemple, l’instruction for – done bouclera sur les paramètres de position et mettra tour à tour « affiche », « iftest », « lecture » et « toto » dans la variable NOMFICH.

Décision et bouclage (5)

38

Page 39: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction for – donefor – done Bouclage sur une liste de paramètres donnés Bouclage sur une liste de paramètres donnés

dans le programmedans le programme

39

#!/bin/bash# Nom du programme: fortest2# fortest1: montrer bouclage for - done sur les paramètres donnés dans le programme

# voir si les fichiers donnés à la ligne de commande existent...for NOMFICH in "affiche" "iftest" "lecture" "toto"do if [ -f "$NOMFICH" ] ; then printf "%s existe\n" "$NOMFICH" else printf "%s n'existe pas\n" "$NOMFICH" fidone

Décision et bouclage (6)

39

Page 40: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction for – donefor – done Bouclage sur une liste de paramètres donnés Bouclage sur une liste de paramètres donnés

dans le programmedans le programme

40

Dans cet exemple, l’instruction for – done bouclera sur les paramètres donnés explicitement dans le programme et mettra tour à tour « affiche », « iftest », « lecture » et « toto » dans la variable NOMFICH.

Décision et bouclage (7)

40

Page 41: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction case - esaccase - esac• Sémantiquement Sémantiquement case – esaccase – esac est un ensemble est un ensemble

de de if – then – elseif – then – else mais organisée d’une mais organisée d’une manière structurée.manière structurée.

• La syntaxe de cette instruction:La syntaxe de cette instruction:

case var incase var in descripteur [| descripteur] ) cmds ;;descripteur [| descripteur] ) cmds ;;esacesac

o varvar est une variable dont le contenu est à tester; est une variable dont le contenu est à tester;o descripteurdescripteur est une expression qui sert de est une expression qui sert de

comparaison;comparaison;o cmdscmds sont des commandes à exécuter si le résultat de sont des commandes à exécuter si le résultat de

la comparaison est vrai.la comparaison est vrai.41

Décision et bouclage (8)

41

Page 42: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction case - esaccase - esac• Voici la liste des descripteurs de Voici la liste des descripteurs de case - esaccase - esac

42

Descripteur

Signification

** Une chaîne de caractères quelconque incluant la Une chaîne de caractères quelconque incluant la chaîne videchaîne vide

?? Un caractère quelconque incluant le caractère videUn caractère quelconque incluant le caractère vide

[abcdeFg][abcdeFg] Un caractère parmi ceux placés entre crochets Un caractère parmi ceux placés entre crochets (OU-logique implicite)(OU-logique implicite)

[a-z][a-z] Un caractère parmi la gamme de caractères placés Un caractère parmi la gamme de caractères placés entre crochets (OU-logique implicite)entre crochets (OU-logique implicite)

[!abcdeFg][!abcdeFg][!a-z][!a-z]

Un caractère qui n’est pas ceux placé entre Un caractère qui n’est pas ceux placé entre crochets (négation-logique)crochets (négation-logique)

xxabcdeFgabcdeFg

Un ou plusieurs caractères donnés explicitement Un ou plusieurs caractères donnés explicitement (ET-logique implicite)(ET-logique implicite)

Décision et bouclage (9)

42

Page 43: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction case - esaccase - esac

43

#!/bin/bash# Nom du programme: casesac# casesac: montrer l'utilisation de case - esac

# traiter les paramètres de position d'une commandeif [ $# -eq 0 ]; then echo "usage: casesac -t -q -l nom_du_fichier" exit 1fi# utiliser case - esac pour traiter les paramètres de positionfor OPTION ; do case "$OPTION" in -t) echo "Option -t reçue" OPT_T="OUI" ;; -q) echo "Option -q reçue" ; OPT_Q="OUI" ;; -l) echo "Option -l reçue" ; OPT_L="OUI" ;; [!-]*) echo "Nom du fichier reçu"; NOM_FICH="$OPTION" ;; *) echo "Option inconnue $OPTION reçue" ;; esacdoneif [ -f "$NOM_FICH" ]; then echo "Fichier $NOM_FICH existe!"else echo "Fichier $NOM_FICH n'existe pas!"fi

Que signifie le descripteur ?[!-]*

Pourquoi le descripteur*) est-il placé à la fin de case – esac dans cet exemple?

Décision et bouclage (10)

43

Page 44: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction case - esaccase - esac

44

[!-]* sert à tester les paramètres de position qui ne commencent pas par un tiret.*) placé à la fin de case – esac permet de capturer les options illégales données à la ligne de commande par l’utilisateur.

Décision et bouclage (11)

44

Page 45: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction case - esaccase - esac• Voici un exemple de descripteur capable de Voici un exemple de descripteur capable de

détecter la présence d’un code postal dans une détecter la présence d’un code postal dans une variable:variable:o Code postalCode postal

Lettre-chiffre-lettre-chiffre-lettre-chiffreLettre-chiffre-lettre-chiffre-lettre-chiffrePar exemple: Par exemple: H3C1K3H3C1K3

o DescripteurDescripteur[A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9]

o Par contre, le descripteur précédent ne reconnaîtra Par contre, le descripteur précédent ne reconnaîtra paspash3C1k3h3C1k3

o Nouveau descripteur (bingo!)Nouveau descripteur (bingo!)[A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9]

45

Décision et bouclage (12)

45

Page 46: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction while – do - donewhile – do - done• La syntaxe de cette instruction est:La syntaxe de cette instruction est:

while [ commandes-test ]while [ commandes-test ]dodo commandescommandesdonedone

o Il y aura bouclage Il y aura bouclage tant et aussi longtempstant et aussi longtemps que le que le statut de retour de statut de retour de commandes-testcommandes-test est est vraivrai (égal à (égal à 0)0)

46

Attention! La logique utilisée est la suivante:Attention! La logique utilisée est la suivante:

Égal à zéro Égal à zéro Vrai VraiDifférent de zéro Différent de zéro Faux Faux

Décision et bouclage (13)

46

Page 47: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction while – do - donewhile – do - done

47

#!/bin/bash# Nom du programme: whiletest# whiletest: montrer l'utilisation de while - do - done

# boucler et demander à l'utilisateur le nom d'un répertoire# qui doit exister

REPERTOIRE=while [ ! -d "$REPERTOIRE" ]do printf "Donner le nom d'un répertoire existant: " read REPERTOIREdoneecho "Merci!"

Décision et bouclage (14)

47

Page 48: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction until – do - doneuntil – do - done• La syntaxe de cette instruction est:La syntaxe de cette instruction est:

until [ commandes-test ]until [ commandes-test ]dodo commandescommandesdonedone

o Il y aura bouclage Il y aura bouclage tant et aussi longtempstant et aussi longtemps que le que le statut de retour de statut de retour de commandes-testcommandes-test est est fauxfaux (différent de 0)(différent de 0)

48

Attention! La logique utilisée est la suivante:Attention! La logique utilisée est la suivante:

Égal à zéro Égal à zéro Vrai VraiDifférent de zéro Différent de zéro Faux Faux

Décision et bouclage (15)

48

Page 49: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Instruction Instruction until – do - doneuntil – do - done

49

#!/bin/bash# Nom du programme: untiltest# untiltest: montrer l'utilisation de until - do - done

# boucler et demander à l'utilisateur le nom d'un répertoire# qui doit exister

REPERTOIRE=until [ -d "$REPERTOIRE" ]do printf "Donner le nom d'un répertoire existant: " read REPERTOIREdoneecho "Merci!"

On voit très bien queuntil – do – doneest le complément dewhile – do - done

Décision et bouclage (16)

49

Page 50: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Fin de la première partieFin de la première partiedu chapitre 6du chapitre 6

Page 51: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Références

[1] Présentations PowerPoint du cours GPA435, Tony Wong.

[2] Notes de cours, GPA435

[3] Levasseur, Yan, Wiki GPA435: http://bash.leyan.org/Accueil , consulté en avril 2014.

[4] Tanenbaum, A.S., Systèmes d’exploitation. Pearson Education France, 2008.

[5] Stallings, W., Operating Systems : Internals and Design Principals. Upper Saddle River, NJ : Prentice Hall, 1998.

[6] Références citées dans le premier chapitre des notes de cours.

51 Jean-Philippe Roberge - Avril 2014