Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAnsell Barreau Modifié depuis plus de 10 années
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
2
GPA435, GPA – ÉTS, T. Wong Fonctions utilisateurs Nous pouvons rendre la programmation plus structurée en utilisant des fonctions Nous pouvons rendre la programmation plus structurée en utilisant des fonctions La syntaxe est: La syntaxe est: Nom_fonction () { commandes commandes} Une fonction utilisateur joue le rôle dune sous- routine. Une fonction utilisateur joue le rôle dune sous- routine. 2
3
GPA435, GPA – ÉTS, T. Wong Fonctions utilisateurs Caractéristiques des 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
4
GPA435, GPA – ÉTS, T. Wong Fonctions utilisateurs Passage des paramètres dans une fonction utilisateur Passage des paramètres dans une fonction utilisateur o Par variables globales ERRNO=1234 gestion_erreur () { case "$ERRNO" in case "$ERRNO" in 0) ;; # pas d'erreur 0) ;; # 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 1 exit 1 ;; ;; esac esac} while [ $ERRNO -ne 0 ] do repertoire; ERRNO=$? repertoire; ERRNO=$? gestion_erreur gestion_erreurdone 4 1) Le contenu de la variable globale ERRNO est visible par la fonction gestion_erreur() puisquelle 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.
5
GPA435, GPA – ÉTS, T. Wong Fonctions utilisateurs Passage des paramètres dans une fonction utilisateur Passage des paramètres dans une fonction utilisateur o Par paramètres de position gestion_erreur () { case "$1" in case "$1" in 0) ;; # pas d'erreur 0) ;; # 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 1 exit 1 ;; ;; esac esac}ERRNO=123 while [ $ERRNO -ne 0 ] do repertoire; ERRNO=$? repertoire; ERRNO=$? gestion_erreur "$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.
6
GPA435, GPA – ÉTS, T. Wong Fonctions utilisateurs Passage des paramètres dans une fonction utilisateur Passage des paramètres dans une fonction utilisateur o Par paramètres de position o De façon générale: # définition de la fonction funcA () { # $# 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 fonction funcA par1 par2 par3 6 Donc, pour une fonction utilisateur, les paramètres de position se comportent exactement comme un programme
7
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Certains caractères ont une signification spéciale pour linterpréteur de commande Certains caractères ont une signification spéciale pour linterpréteur de commande Par exemple: 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 à dautres fin Cependant, à cause du nombre limité de caractères disponibles, certaines commandes et programmes réutilisent ces mêmes caractères mais à dautres fin Par exemple: Par exemple: o $ pour signifie la valeur monétaire; o () pour regrouper les expressions mathématiques; o etc. 7
8
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Sans un mécanisme de contournement, ces caractères spéciaux seront interprétés dune façon erronée par linterpréteur de commande. Sans un mécanisme de contournement, ces caractères spéciaux seront interprétés dune façon erronée par linterpréteur de commande. Les commandes et programmes qui utilisent ces caractères spéciaux ne pourront pas sexécuter correctement. Les commandes et programmes qui utilisent ces caractères spéciaux ne pourront pas sexécuter correctement. Doù la nécessité de neutraliser la signification particulière de ces caractères spéciaux pour linterpréteur de commande. Doù la nécessité de neutraliser la signification particulière de ces caractères spéciaux pour linterpréteur de commande. 8
9
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Un exemple Un exemple Nous désirons afficher la chaîne de caractère « Lola & Lilo ». Voici le résultat: Nous désirons afficher la chaîne de caractère « Lola & Lilo ». Voici le résultat: 9 Linterpré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.
10
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Un exemple Un exemple Nous désirons afficher la chaîne de caractère « Lola & Lilo ». Voici le résultat: 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. Linterpréteur de commande considérera \& comme le caractère & et non pas le symbole pour lexécution en arrière-plan.
11
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Ainsi, le symbole \ permet la neutralisation du caractère qui le suit. 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 2 e. On dit que \ est un neutralisateur de simple (1 seul) caractère.
12
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Nous pouvons neutraliser plus dun caractère à la fois par les guillemets et les apostrophes. Nous pouvons neutraliser plus dun caractère à la fois par les guillemets et les apostrophes. Guillemets Guillemets o Neutralise la signification spéciale du caractère ESPACE; o Permet la substitution des variables et des commandes; o Permet lutilisation du neutralisateur \. 12 Bug 1: $CAD est interprété comme le contenu de la variable CAD et non pas dollar canadien Bug 2: Le caractère ESPACE a séparé la chaîne de caractères en 2 parties Lutilisation des guillemets et de \ permet de solutionner ce problème.
13
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Nous pouvons neutraliser plus dun caractère à la fois par les guillemets et les apostrophes. Nous pouvons neutraliser plus dun caractère à la fois par les guillemets et les apostrophes. 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.
14
GPA435, GPA – ÉTS, T. Wong Neutralisation des caractères Dautres exemples qui aident à la compréhension de la neutralisation des méta- caractères Dautres 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 panne La machine 'my-ubuntu' est en panne gpa435 > echo La machine "'$MACHINE'" est en panne La machine 'my-ubuntu' est en panne gpa435 > echo La machine '$MACHINE' est en panne La machine $MACHINE est en panne gpa435 > echo "La machine '$MACHINE' est en panne" La machine 'my-ubuntu' est en panne gpa435 > echo 'La machine $MACHINE est en panne' La machine $MACHINE est en panne gpa435 > echo 'La machine '$MACHINE' est en panne' La machine my-ubuntu est en panne
15
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) Dans un programme, la commande exec(1) permet lexécution dune commande sans la création dun nouveau processus. Dans un programme, la commande exec(1) permet lexécution dune commande sans la création dun nouveau processus. Vous pouvez donc passer des paramètres du programme à la commande à exécuter. Vous pouvez donc passer des paramètres du programme à la commande à exécuter. Attention! Ce nest pas un appel de sous- routine car le contrôle ne revient pas au programme. Attention! Ce nest pas un appel de sous- routine car le contrôle ne revient pas au programme. 15
16
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) Voici un exemple: 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" nest jamais exécutée.
17
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) La commande exec(1) sert aussi à rediriger les entrées-sorties standard dune façon globale. La commande exec(1) sert aussi à rediriger les entrées-sorties standard dune façon globale. Différentes syntaxes: Différentes syntaxes: exec no_desc> nom_fich exec no_desc> nom_fich exec no_desc>&no_desc exec no_desc>&no_desc exec no_desc>> nom_fich exec no_desc>> nom_fich exec no_desc< nom_fich exec no_desc< nom_fich exec no_desc<&no_desc exec no_desc<&no_desc 17 Légende: no_desc : numéro descripteur nom_fich : nom de fichier >, >&, >>,, >&, >>, <, <& : opérateurs de redirection
18
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) Un exemple: Un exemple: 18 À partir de ce point, tous les messages derreur seront envoyés dans un fichier nommé errmsg.txt. On pourra en faire de même pour rediriger dune façon globale la sortie standard et lentrée standard en utilisant les opérateurs de redirection appropriés.
19
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) La commande trap(1) est fort utile pour la programmation La commande trap(1) est fort utile pour la programmation La syntaxe: La syntaxe: trap commandes signaux o commandes est un ensemble de commandes Linux; o signaux sont des numéros (entiers). À la réception dun signal par le programme, les commandes entre apostrophes sont exécutées. À la réception dun signal par le programme, les commandes entre apostrophes sont exécutées. 19
20
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) Quelle est lutilité de trap(1) ? Quelle est lutilité de trap(1) ? Pour réaliser une fin de programme en « beauté » 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 durgence, etc. Pour empêcher certains évènements inappropriés de faire avorter le programme Pour empêcher certains évènements inappropriés de faire avorter le programme o Le disque plein, la clé USB nest plus disponible, le programme change son état par les touches ctrl-c, ctrl-y, ctrl- z, etc. 20
21
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) Voici quelques signaux disponibles Voici quelques signaux disponibles 21 SignalSignification ctrl-c Interrompre le programme ctrl-y Suspendre (bloque) le programme lorsquil tentera de lire lentré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?
22
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) Exemple dutilisation de trap(1) Exemple dutilisation 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.
23
GPA435, GPA – ÉTS, T. Wong Commandes exec(1) et trap(1) Exemple dutilisation de trap(1) Exemple dutilisation 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.
24
GPA435, GPA – ÉTS, T. Wong Fin de la deuxième partie du chapitre 6
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.