24
GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système d’exploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

Embed Size (px)

Citation preview

Page 1: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Génie de la production automatisée

GPA435 Système d’exploitation et programmation de systèmeChapitre 6Partie II2014

Page 2: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Fonctions utilisateurs

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

La syntaxe est:

Nom_fonction () { commandes}

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

2

Page 3: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Fonctions utilisateurs

Caractéristiques des fonctions utilisateurs:

o Syntaxe

nom_fonction () { commandes }

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

o Prend préséance sur les commandes systèmes portant le même nom – Attention! Source de confusion!

o Doit avoir un statut (valeur) de retour : exit n où n est un entier positif (0 OK, 0 Erreur). Par défaut une fonction utilisateur retourne la valeur 0 comme statut de retour.

3

Page 4: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Fonctions utilisateurs

Passage des paramètres dans une fonction utilisateur

o Par variables globales

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

while [ $ERRNO -ne 0 ]do repertoire; ERRNO=$? gestion_erreurdone

4

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.

Page 5: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Fonctions utilisateurs

Passage des paramètres dans une fonction utilisateur

o Par paramètres de position

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

ERRNO=123while [ $ERRNO -ne 0 ]do repertoire; ERRNO=$? gestion_erreur "$ERRNO"done 5

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.

Page 6: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Fonctions utilisateurs

Passage des paramètres dans une fonction utilisateur

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

# définition de la fonctionfuncA () {

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

}

# utilisation de la fonctionfuncA par1 par2 par3

6

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

Page 7: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

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

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

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

7

Page 8: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

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

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

8

Page 9: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

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

9

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

1. Exécuter echo Lola & (echo Lola en arrière-plan);2. Exécuter Lilo comme une commande.

Page 10: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

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

10

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

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

Page 11: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

11

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

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

Page 12: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

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

o Permet la substitution des variables et des commandes;

o Permet l’utilisation du neutralisateur \.

12

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 problème.

Page 13: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

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

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

o Neutralise le neutralisateur \.

13

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

Page 14: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Neutralisation des caractères

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

14

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

Page 15: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

Dans un programme, la commande exec(1) permet l’exécution d’une commande sans la création d’un nouveau processus.

Vous pouvez donc passer des paramètres du programme à la commande à exécuter.

Attention! Ce n’est pas un appel de sous-routine car le contrôle ne revient pas au programme.

15

Page 16: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

Voici un exemple:

16

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

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

Page 17: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

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

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

17

Légende:no_desc : numéro descripteurnom_fich : nom de fichier>, >&, >>, <, <& : opérateurs de redirection

Page 18: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

Un exemple:

18

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

Page 19: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

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

La syntaxe:trap ‘commandes’ signaux

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

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

19

Page 20: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

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

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

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

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

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

20

Page 21: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

Voici quelques signaux disponibles

21

Signal Signification

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 trap(1), Saviez-vous pourquoi?

Page 22: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

Exemple d’utilisation de trap(1)

22

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

Page 23: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Commandes exec(1) et trap(1)

Exemple d’utilisation de trap(1)

23

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

Page 24: GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie II 2014

GPA435, GPA – ÉTS, T. Wong

Fin de la deuxième partiedu chapitre 6