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

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

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

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

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

-GPA435-

Cours #5: Éléments de programmation (Partie 2)

Enseignant: Jean-Philippe Roberge

Jean-Philippe Roberge - Mai 2014

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

Planification du cours #5

Petite révision du cours #4: Substitution de variables et de commandes (mention seulement) Paramètres du shell ( Une dernière fois) Lecture et affichage Décision et bouclage

Théorie du cours #5: Fonctions utilisateur du shell Neutralisation des caractères Commandes exec et trap Déverminage

Renseignements par rapport à l’examen intra2

Jean-Philippe Roberge - Mai 2014

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

Paramètres de positionParamètres de position

commande param1 param2 param2 param4commande param1 param2 param2 param4

3

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

Retour sur le cours #4 (1)

3

Page 4: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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

4

#!/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

Retour sur le cours #4 (2)

4

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

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

5

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

Retour sur le cours #4 (3)

5

Page 6: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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

6

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

Retour sur le cours #4 (4)

6

http://www.linfo.org/uid.html

Page 7: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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.

7

voici une-ligne de données !

Il y a 5 champs

var1 var2 var3 var3

var3

Retour sur le cours #4 (5)

7

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

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

8

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.

Retour sur le cours #4 (6)

8

Page 9: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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

9

\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.

Retour sur le cours #4 (7)

9

Page 10: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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:

10

%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.

Retour sur le cours #4 (8)

10

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

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

11

#!/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

Retour sur le cours #4 (9)

11

Page 12: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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

12

#!/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

Retour sur le cours #4 (10)

12

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

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

13

#!/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

Retour sur le cours #4 (11)

13

Page 14: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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

14

#!/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

Retour sur le cours #4 (12)

14

Page 15: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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

15

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)

Retour sur le cours #4 (13)

15

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

Instruction Instruction case - esaccase - esac

16

#!/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?

Retour sur le cours #4 (14)

16

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

Instruction Instruction while – do - donewhile – do - done

17

#!/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!"

Retour sur le cours #4 (15)

17

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

Instruction Instruction until – do - doneuntil – do - done

18

#!/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

Retour sur le cours #4 (16)

18

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

Quelques exemples Quelques exemples récapitulatifs…récapitulatifs…

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

Cours #5Cours #5

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

Nous pouvons rendre la Nous pouvons rendre la programmation plus structurée en programmation plus structurée en utilisant des fonctionsutilisant des fonctions

La syntaxe est:La syntaxe est:

Nom_fonction () Nom_fonction () {{ commandescommandes}}

Une fonction utilisateur joue le rôle Une fonction utilisateur joue le rôle d’une sous-routine.d’une sous-routine. 21

Fonctions utilisateur (1)

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

Caractéristiques des fonctions Caractéristiques des fonctions utilisateurs:utilisateurs:

o SyntaxeSyntaxe

nom_fonction () { commandes }nom_fonction () { commandes }

o Définition des fonctions utilisateurs au début du fichier de Définition des fonctions utilisateurs au début du fichier de

commandescommandeso Prend préséance sur les commandes systèmes portant le Prend préséance sur les commandes systèmes portant le

même nom – Attention! Source de confusion!même nom – Attention! Source de confusion!o Doit avoir un statut (valeur) de retour : Doit avoir un statut (valeur) de retour : exit nexit n où où nn est un est un

entier positif (entier positif (00 OK, OK, 00 Erreur). Par défaut une fonction Erreur). Par défaut une fonction

utilisateur retourne la valeur utilisateur retourne la valeur 00 comme statut de retour. comme statut de retour.22

Fonctions utilisateur (2)

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

Passage des paramètres dans une Passage des paramètres dans une fonction utilisateurfonction utilisateur

o Par variables globalesPar variables globales

ERRNO=1234ERRNO=1234gestion_erreur () {gestion_erreur () { case "$ERRNO" incase "$ERRNO" in 0) ;; # pas d'erreur0) ;; # pas d'erreur 101) echo "Répertoire inexistant" ;;101) echo "Répertoire inexistant" ;; 102) echo "Permission d'écriture obligatoire";;102) echo "Permission d'écriture obligatoire";; *) echo "Code d'erreur inconnu" *) echo "Code d'erreur inconnu" exit 1exit 1 ;;;; esacesac}}

while [ $ERRNO -ne 0 ]while [ $ERRNO -ne 0 ]dodo repertoire; ERRNO=$?repertoire; ERRNO=$? gestion_erreurgestion_erreurdonedone

23

1) Le contenu de la variable globale ERRNO est visible par la fonction gestion_erreur() puisqu’elle a été déclarée avant la définition de la fonction.

2) La fonction gestion_erreur() peut traiter le contenu de la variable globale ERRNO.

Fonctions utilisateur (3)

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

Passage des paramètres dans une Passage des paramètres dans une fonction utilisateurfonction utilisateur

o Par paramètres de positionPar paramètres de position

gestion_erreur () {gestion_erreur () { case "$1" incase "$1" in 0) ;; # pas d'erreur0) ;; # pas d'erreur 101) echo "Répertoire inexistant" ;;101) echo "Répertoire inexistant" ;; 102) echo "Permission d'écriture obligatoire";;102) echo "Permission d'écriture obligatoire";; *) echo "Code d'erreur inconnu" *) echo "Code d'erreur inconnu" exit 1exit 1 ;;;; esacesac}}

ERRNO=123ERRNO=123while [ $ERRNO -ne 0 ]while [ $ERRNO -ne 0 ]dodo repertoire; ERRNO=$?repertoire; ERRNO=$? gestion_erreur "$ERRNO"gestion_erreur "$ERRNO"donedone 24

1) Le contenu de la variable ERRNO est passé à la fonction gestion_erreur() comme un paramètre de position.

2) La fonction gestion_erreur() reçoit le contenu de la variable ERRNO dans sa variable de position $1.

Fonctions utilisateur (4)

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

Passage des paramètres dans une Passage des paramètres dans une fonction utilisateurfonction utilisateur

o Par paramètres de positionPar paramètres de positiono De façon générale:De façon générale:

# définition de la fonction# définition de la fonctionfuncA () {funcA () {

# $# le nombre de paramètres de position# $# le nombre de paramètres de position# $* et $@ la ligne des paramètres de position# $* et $@ la ligne des paramètres de position# $1 reçoit le contenu de $par1# $1 reçoit le contenu de $par1# $2 reçoit le contenu de $par2# $2 reçoit le contenu de $par2# $3 reçoit le contenu de $par3# $3 reçoit le contenu de $par3# et ainsi de suite# et ainsi de suite

}}

# utilisation de la fonction# utilisation de la fonctionfuncA par1 par2 par3 funcA par1 par2 par3

25

Donc, pour une fonction utilisateur, les paramètres de position se comportent exactement comme un programme

Fonctions utilisateur (5)

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

Certains caractères ont une signification Certains caractères ont une signification spéciale pour l’interpréteur de commandespéciale pour l’interpréteur de commande• Par exemple:Par exemple:

o &&, , ((, , )), , **, , !!, , $$, etc., etc.

Cependant, à cause du nombre limité de Cependant, à cause du nombre limité de caractères disponibles, certaines caractères disponibles, certaines commandes et programmes réutilisent ces commandes et programmes réutilisent ces mêmes caractères mais à d’autres finsmêmes caractères mais à d’autres fins• Par exemple:Par exemple:

o $$ pour signifie la valeur monétaire; pour signifie la valeur monétaire;o ()() pour regrouper les expressions mathématiques, pour regrouper les expressions mathématiques,

logiques, etc…;logiques, etc…;o etc…etc…

26

Neutralisation des caractères (1)

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

Sans un mécanisme de contournement, Sans un mécanisme de contournement, ces caractères spéciaux seront ces caractères spéciaux seront interprétés d’une façon erronée par interprétés d’une façon erronée par l’interpréteur de commande.l’interpréteur de commande.

Les commandes et programmes qui Les commandes et programmes qui utilisent ces caractères spéciaux ne utilisent ces caractères spéciaux ne pourront pas s’exécuter correctement.pourront pas s’exécuter correctement.

D’oD’où la nécessité de ù la nécessité de neutraliserneutraliser la la signification particulière de ces signification particulière de ces caractères spéciaux pour l’interpréteur caractères spéciaux pour l’interpréteur de commande.de commande.

27

Neutralisation des caractères (2)

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

Un exempleUn exemple• Nous désirons afficher la chaNous désirons afficher la chaîne de caractère îne de caractère

« « Lola & LiloLola & Lilo » ». Voici le résultat:. Voici le résultat:

28

L’interpréteur de commande a interprété ceci:L’interpréteur de commande a interprété ceci:

1.1.Exécuter Exécuter echo Lola &echo Lola & ( (echo Lolaecho Lola en arrière-plan); en arrière-plan);2.2.Exécuter Exécuter LiloLilo comme une commande. comme une commande.

Neutralisation des caractères (3)

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

Un exempleUn exemple• Nous désirons afficher la chaNous désirons afficher la chaîne de caractère îne de caractère

« « Lola & LiloLola & Lilo » ». Voici le résultat:. Voici le résultat:

29

Le méta-caractère Le méta-caractère && est neutralisé par le symbole est neutralisé par le symbole \\ qui agit qui agit comme un neutralisateur.comme un neutralisateur.

L’interpréteur de commande considérera L’interpréteur de commande considérera \&\& comme le comme le caractère caractère && et non pas le symbole pour l’exécution en et non pas le symbole pour l’exécution en arrière-plan.arrière-plan.

Neutralisation des caractères (4)

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

Ainsi, le symbole \ permet la Ainsi, le symbole \ permet la neutralisation du caractère qui le suit.neutralisation du caractère qui le suit.

30

Le symbole Le symbole \\ a effectivement neutralisé le premier méta- a effectivement neutralisé le premier méta-caractère & mais pas le 2caractère & mais pas le 2ee..

On dit que \ est un neutralisateur de simple (1 seul) On dit que \ est un neutralisateur de simple (1 seul) caractère.caractère.

Neutralisation des caractères (5)

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

Nous pouvons neutraliser plus d’un Nous pouvons neutraliser plus d’un caractère à la fois par les guillemets et caractère à la fois par les guillemets et les apostrophes.les apostrophes.• GuillemetsGuillemets

o Neutralise la signification spéciale du caractère Neutralise la signification spéciale du caractère ESPACE;ESPACE;

o Permet la substitution des variables et des Permet la substitution des variables et des commandes;commandes;

o Permet l’utilisation du neutralisateur \.Permet l’utilisation du neutralisateur \.

31

Bug 1: $CAD est interprété comme

le contenu de la variable CAD et non pas dollar

canadienBug 2: Le

caractère ESPACE a séparé

la chaîne de caractères en 2

partiesL’utilisation des guillemets et de \ permet de solutionner ce L’utilisation des guillemets et de \ permet de solutionner ce problème.problème.

Neutralisation des caractères (6)

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

Nous pouvons neutraliser plus d’un Nous pouvons neutraliser plus d’un caractère à la fois par les guillemets et caractère à la fois par les guillemets et les apostrophes.les apostrophes.• ApostrophesApostrophes

o Neutralise la signification spéciale du caractère Neutralise la signification spéciale du caractère ESPACE;ESPACE;

o Empêche la substitution des variables et des Empêche la substitution des variables et des commandes;commandes;

o Neutralise le neutralisateur \.Neutralise le neutralisateur \.

32

Les apostrophes ont effectivement neutralisé le neutralisateur Les apostrophes ont effectivement neutralisé le neutralisateur \\ et et empêché la substitution de la variable empêché la substitution de la variable CADCAD..

Neutralisation des caractères (7)

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

D’autres exemples qui aident D’autres exemples qui aident à la à la compréhension de la neutralisation compréhension de la neutralisation des méta-caractèresdes méta-caractères

33

gpa435> MACHINE=`hostname`gpa435> MACHINE=`hostname`gpa435 > echo La machine \'$MACHINE\' est en pannegpa435 > echo La machine \'$MACHINE\' est en panneLa machine 'my-ubuntu' est en panneLa machine 'my-ubuntu' est en pannegpa435 > echo La machine "'$MACHINE'" est en pannegpa435 > echo La machine "'$MACHINE'" est en panneLa machine 'my-ubuntu' est en panneLa machine 'my-ubuntu' est en pannegpa435 > echo La machine '$MACHINE' est en pannegpa435 > echo La machine '$MACHINE' est en panneLa machine $MACHINE est en panneLa machine $MACHINE est en pannegpa435 > echo "La machine '$MACHINE' est en panne"gpa435 > echo "La machine '$MACHINE' est en panne"La machine 'my-ubuntu' est en panneLa machine 'my-ubuntu' est en pannegpa435 > echo 'La machine $MACHINE est en panne'gpa435 > echo 'La machine $MACHINE est en panne'La machine $MACHINE est en panneLa machine $MACHINE est en pannegpa435 > echo 'La machine '$MACHINE' est en panne'gpa435 > echo 'La machine '$MACHINE' est en panne'La machine my-ubuntu est en panneLa machine my-ubuntu est en panne

Neutralisation des caractères (8)

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

Dans un programme, la commande exec(1) Dans un programme, la commande exec(1)

permet l’exécution d’une commande sans permet l’exécution d’une commande sans

la création d’un nouveau processus.la création d’un nouveau processus.

Vous pouvez donc passer des paramètres Vous pouvez donc passer des paramètres

du programme à la commande à exécuter.du programme à la commande à exécuter.

Attention! Attention! Ce n’est pas un appel de sous-Ce n’est pas un appel de sous-

routine car le contrôle ne revient pas au routine car le contrôle ne revient pas au

programmeprogramme..

34

Commandes exec(1) et trap(1)

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

Voici un exemple:Voici un exemple:

35

La ligne La ligne exec dateexec date exécute la commande exécute la commande datedate et lui passe et lui passe le contrle contrôle.ôle.

Résultat:Résultat: On voit que la ligne echo On voit que la ligne echo ""Fin du programmeFin du programme"" n’est jamais exécutée.n’est jamais exécutée.

Commandes exec(1) et trap(1)

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

La commande La commande exec(1)exec(1) sert aussi à sert aussi à rediriger les entrées-sorties standard rediriger les entrées-sorties standard d’une façon globale.d’une façon globale.

Différentes syntaxes:Différentes syntaxes:• exec no_desc> nom_fichexec no_desc> nom_fich• exec no_desc>&no_descexec no_desc>&no_desc• exec no_desc>> nom_fichexec no_desc>> nom_fich• exec no_desc< nom_fichexec no_desc< nom_fich• exec no_desc<&no_descexec no_desc<&no_desc

36

Légende:Légende:no_descno_desc : numéro descripteur : numéro descripteurnom_fichnom_fich : nom de fichier : nom de fichier>, >&, >>, <, <&>, >&, >>, <, <& : opérateurs de redirection : opérateurs de redirection

Commandes exec(1) et trap(1)

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

Un exemple:Un exemple:

37

À partir de ce point, tous les messages d’erreur seront À partir de ce point, tous les messages d’erreur seront envoyés dans un fichier nommé envoyés dans un fichier nommé errmsg.txterrmsg.txt..On pourra en faire de même pour rediriger d’une façon On pourra en faire de même pour rediriger d’une façon globale la sortie standard et l’entrée standard en utilisant globale la sortie standard et l’entrée standard en utilisant les opérateurs de redirection appropriés.les opérateurs de redirection appropriés.

Commandes exec(1) et trap(1)

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

La commande trap(1) est fort utile La commande trap(1) est fort utile pour la programmationpour la programmation

La syntaxe:La syntaxe:trap ‘commandes’ signauxtrap ‘commandes’ signaux

ocommandescommandes est un ensemble de commandes Linux; est un ensemble de commandes Linux;osignauxsignaux sont des numéros (entiers). sont des numéros (entiers).

À la réception d’un signal par le À la réception d’un signal par le programme, les commandes entre programme, les commandes entre apostrophes sont exécutées.apostrophes sont exécutées.

38

Commandes exec(1) et trap(1)

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

Quelle est l’utilité de trap(1) ?Quelle est l’utilité de trap(1) ?• Pour réaliser une fin de programme en Pour réaliser une fin de programme en

« beauté »« beauté »o Advenant une erreur fatale, le programme pourra Advenant une erreur fatale, le programme pourra

effacer ses fichiers temporaires, arrêter ses processus effacer ses fichiers temporaires, arrêter ses processus fils, fermer ses ports internet, afficher un message fils, fermer ses ports internet, afficher un message d’urgence, etc.d’urgence, etc.

• Pour empêcher Pour empêcher certains évènementscertains évènements inappropriés de faire avorter le programmeinappropriés de faire avorter le programmeo Le disque plein, la clé USB n’est plus disponible, le Le disque plein, la clé USB n’est plus disponible, le

programme change son état par les touches ctrl-c, programme change son état par les touches ctrl-c, ctrl-y, ctrl-z, etc. ctrl-y, ctrl-z, etc.

39

Commandes exec(1) et trap(1)

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

Voici quelques signaux disponiblesVoici quelques signaux disponibles

40

SignalSignal SignificationSignification

ctrl-c Interrompre le programme

ctrl-y Suspendre (bloque) le programme lorsqu’il tentera de lire l’entrée standard

ctrl-z Suspendre (bloque) le programme

1 Couper le lien logique avec le terminal

2 Interrompre le programme

9 Tuer (kill) le programme

15 Fin (normale) du programme

17, 19, 23 Arrêter le programme

Les signaux 9, 17, 19 et 23 ne peuvent être interceptés par Les signaux 9, 17, 19 et 23 ne peuvent être interceptés par trap(1)trap(1), Saviez-vous pourquoi?, Saviez-vous pourquoi?

Commandes exec(1) et trap(1)

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

Exemple d’utilisation de trap(1)Exemple d’utilisation de trap(1)

41

Ce programme ne fait rien pendant 100 secondes (sleep Ce programme ne fait rien pendant 100 secondes (sleep 100).100).Envoyez le signal Envoyez le signal ctrl-cctrl-c au programme. au programme. La commande La commande trap(1)trap(1) interceptera le signal et affiche un interceptera le signal et affiche un message à la sortie standard.message à la sortie standard.

Commandes exec(1) et trap(1)

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

Exemple d’utilisation de trap(1)Exemple d’utilisation de trap(1)

42

Ce programme ne fait rien pendant 100 secondes (sleep 100).Ce programme ne fait rien pendant 100 secondes (sleep 100).Envoyez le signal Envoyez le signal ctrl-zctrl-z pour suspendre le programme. pour suspendre le programme. Entrer la commande Entrer la commande bgbg pour exécuter le programme en arrière-plan. pour exécuter le programme en arrière-plan.Entrer la commande Entrer la commande fgfg pour exécuter le programme en avant-plan pour exécuter le programme en avant-planÀ la fin du programme, À la fin du programme, trap(1)trap(1) affiche un message. affiche un message.

Commandes exec(1) et trap(1)

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

Fin de la deuxième partieFin de la deuxième partiedu chapitre 6du chapitre 6

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

Examen intra

Je serai absent pour les deux prochaines semaines, Patricia Ouimet me remplacera.

Date: Lundi le 9 juin 2014

Durée: 3 heures

Documentation: Toute documentation permise

Lieu: Local de cours habituel (B-1510)

Contenu:

Matière du cours 1 à 6 inclusivement

Chapitres 1, 4, 5, 6 et 7

Questions par courriels à l’avance dans la mesure du possible 44 Jean-Philippe Roberge - Avril

2014

Page 45: Systèmes dexploitation et programmation de systèmes -GPA435- Cours #5: Éléments de programmation (Partie 2) 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.

45 Jean-Philippe Roberge - Avril 2014