La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe."— Transcription de la présentation:

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

2 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 Jean-Philippe Roberge - Mai 2014

3 GPA435 Systèmes d'exploitation et programmation de système
Révision du cours #3 (1) Au niveau des systèmes UNIX / Linux, plusieurs interpréteurs ont vu le jour! Tableau tiré intégralement de ETS - GPA, (c) Tony Wong, Ph.D., ing.

4 Tableau tiré intégralement de http://bash.leyan.org/
Révision du cours #3 (2) 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 Tableau tiré intégralement de

5 Révision du cours #3 (3) cat < FichierEntree > FichierSortie
Redirection de l’entrée et de la sortie standard: cat < FichierEntree > FichierSortie 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 >> FichierSortie La sortie de la commande cat est ajoutée à la fin du fichier FichierSortie cat < entree.txt > sortie.txt 2> erreur.txt Les messages d ’erreur de la commande cat seront enregistrés dans ce fichier

6 Révision du cours #3 (4) Tuyaux  brancher la sortie standard d’une commande à l’entrée standard d’une autre commande. Exemple: cat document.txt | tr abc ABC > traduit.txt

7 commande [-options] [paramètre] &
Révision du cours #3 (5) Lancer les commandes en arrière-plan: commande [-options] [paramètre] & Symbole indiquant une exécution en arrière-plan d’une commande Un cas: 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 Plusieurs combinaisons sont possibles

8 Révision du cours #3 (6) Exemple:
Commandes entre parenthèses sont exécutées par un interpréteur enfant. Quelle sera la sortie de ces deux commandes ?

9 Révision du cours #3 (7)  Démonstration de la procédure
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édure

10 Révision du cours #3 (8) Variables prédéfinies:

11 Révision du cours #3 (9) Variables prédéfinies (suite):

12 Révision du cours #3 (10) Transmettre une variable à un interpréteur enfant: export(1) Exemple d’exportation d’une variable: Variable REPERTOIRE n’est pas exportée et elle n’est pas disponible dans les interpréteurs enfants.

13 GPA435 Systèmes d'exploitation et programmation de système
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édure ; ETS - GPA, (c) Tony Wong, Ph.D., ing.

14 GPA435 - Systèmes d'exploitation et programmation de système
Cours #4 Jean-Philippe Roberge - Mai 2014 ETS - GPA, (c) Tony Wong, Ph.D., ing.

15 Substitution de variable (1)
GPA435 S.E. et P.S. Une variable est identifiée par son nom. Le contenu de la variable Le contenu de la variable est identifié par le symbole $ placé devant le nom. Par exemple: GPA435 $GPA435 Contenu de la variable Nom de la variable 15 Présentation préaprée par T. Wong, ing., Ph.D.

16 Substitution de variable (2)
GPA435 S.E. et P.S. L’interpréteur de commande réalisera la substitution du contenu d’une variable lorsqu’il rencontre le symbole $ suivi d’un nom de variable. Deux résultats possibles: Substitution du contenu Si la variable est définie et son contenu est non nul. Substitution vide Si la variable n’est pas définie ou son contenu est nul. Lorsqu’une variable est vide (sans aucune donnée) alors son contenu est nul 16 Présentation préaprée par T. Wong, ing., Ph.D.

17 Substitution de variable (3)
GPA435 S.E. et P.S. Substitution de variable (3) Exemple de substitution des variables Même résultat Présentation préaprée par T. Wong, ing., Ph.D.

18 Substitution de variable (4)
GPA435 S.E. et P.S. Il est possible d’assigner le résultat d’une ligne de commandes à une variable. Pour ce faire, entourer les commandes par les caractères ` ` (accents grave). Voici la substitution des commandes à l’œuvre: 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. 18 Présentation préaprée par T. Wong, ing., Ph.D.

19 Paramètres d’une commande (1)
GPA435 S.E. et P.S. Paramètres de position commande param1 param2 param2 param4 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 Il s’agit du nom de la commande. Le nom de la commande est représenté par le paramètre de position $0. 19 Présentation préaprée par T. Wong, ing., Ph.D.

20 Paramètres d’une commande (2)
GPA435 S.E. et P.S. Paramètres de position $0  ls $1  -l $2  Downloads $0  cp $1  Downloads/gpa435_ch5.pptx $2  Downloads/GPA435_CH5.pptx $0  ls $1  -lg $2  Downloads 20 Présentation préaprée par T. Wong, ing., Ph.D.

21 Paramètres d’une commande (3)
GPA435 S.E. et P.S. Paramètres d’une commande (3) Exemple d’utilisation 21 Présentation préaprée par T. Wong, ing., Ph.D.

22 Paramètres d’une commande (4)
GPA435 S.E. et P.S. Paramètres de position Nous pouvons manipuler les paramètres de position: Le décalage vers la gauche à l’aide de shift #!/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" shift Décaler à gauche d’une position 22 Présentation préaprée par T. Wong, ing., Ph.D.

23 Paramètres d’une commande (5)
GPA435 S.E. et P.S. Paramètres de position Nous pouvons manipuler les paramètres de position: Le décalage vers la gauche à l’aide de shift Résultat: Les commandes shift ont placé tour à tour les paramètres de position B, c et d dans la variable $1. 23 Présentation préaprée par T. Wong, ing., Ph.D.

24 Paramètres d’une commande (6)
GPA435 S.E. et P.S. Paramètres de position Symboles associés Symbole Signification $0 Nom de la commande $1 à $9 Contenu des paramètres de position de la commande $$ Numéro de processus (PID) de l’interpréteur de commande qui exécute la commande $# Nombre de paramètres de position Contenu de la ligne de commande 24 Présentation préaprée par T. Wong, ing., Ph.D.

25 Variable de l’interpréteur
GPA435 S.E. et P.S. Ces variables sont prédéfinies par l’interpréteur de commande et sont disponibles pour les programmes utilisateurs Variables Signification $? L’état de terminaison de la dernière commande exécutée $HOME Le chemin de répertoire menant vers le dossier de l’utilisateur $PATH Le chemin de fouille pour les programmes et commandes $USER Le nom d’utilisateur $HOSTNAME Le nom de l’ordinateur $OSTYPE Le nom du système d’exploitation $UID Le numéro de l’utilisateur $* Contenu de la ligne de commande 25 Présentation préaprée par T. Wong, ing., Ph.D.

26 Lecture et affichage (1)
GPA435 S.E. et P.S. La commande read(1) réalise la lecture des données à partir de l’entrée standard: read var1 var2 var3 Lecture de l’entrée standard et place les données dans les variables var1, var2 et var3. La séparation des données en champs est réalisée par l’interpréteur de commande à l’aide de la variable IFS (Internal Field Separator). IFS contient habituellement les caractères espace, tab et ENTER. voici une-ligne de données ! Il y a 5 champs var3 var1 var2 var3 var3 26 Présentation préaprée par T. Wong, ing., Ph.D.

27 Lecture et affichage (2)
GPA435 S.E. et P.S. La commande read(1) 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. 27 Présentation préaprée par T. Wong, ing., Ph.D.

28 Lecture et affichage (3)
GPA435 S.E. et P.S. La commande read(1) 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. 28 Présentation préaprée par T. Wong, ing., Ph.D.

29 Lecture et affichage (4)
GPA435 S.E. et P.S. La commande read(1) Observer bien le contenu de la dernière variable LE_RESTE_DES_EQUIPES 29 Présentation préaprée par T. Wong, ing., Ph.D.

30 Lecture et affichage (5)
GPA435 S.E. et P.S. La commande echo(1) réalise l’affichage à la sortie standard: echo Allo tout le monde echo $var1 $var2 $var3 Affiche à la sortie standard le contenu des variables var1, var2 et var3. echo -e $var1 $var2 $var3 L’option –e permet l’introduction des codes de contrôle d’affichage \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. 30 Présentation préaprée par T. Wong, ing., Ph.D.

31 Lecture et affichage (6)
GPA435 S.E. et P.S. La commande echo(1) réalise l’affichage à la sortie standard: Pourquoi ce résultat? \n  nouvelle ligne \t  tab \r  return \b  backspace \c  continuer l’affichage sur la même ligne 31 Présentation préaprée par T. Wong, ing., Ph.D.

32 Lecture et affichage (7)
GPA435 S.E. et P.S. La commande printf(1) réalise l’affichage à la sortie standard: printf "Allo tout le monde\n" printf "%s\t%s\t%s\n" $var1 $var2 $var3 Affiche à la sortie standard le contenu de var1, suivi du code tabulation, suivi du contenu de var2 , suivi du code tabulation, suivi du contenu de var3 suivi du code nouvelle ligne. La chaîne "%s\t%s\t%s\n" est appelée chaîne de formatage et elle accepte les mêmes formats que sa contrepartie du langage C. En voici quelques exemples: %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. 32 Présentation préaprée par T. Wong, ing., Ph.D.

33 Lecture et affichage (8)
GPA435 S.E. et P.S. Lecture et affichage (8) Quelques exemples 33 Présentation préaprée par T. Wong, ing., Ph.D.

34 Décision et bouclage (1)
GPA435 S.E. et P.S. Instruction if – then - else - fi #!/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 # erreur alors donner le code de retour 1 fi if [ "$1" != "-v" ]; then cat "$1" # pas d'option "-v" alors c'est le nom du fichier à afficher else if [ "$2" != "" ]; then cat "$2" | more # alors afficher le fichier avec formatage par more echo "Nom du fichier à affiche est manquant" exit 1 # erreur alors donner le code de retour 1 exit 0 # tout va bien alors donner le code de retour 0 34 Présentation préaprée par T. Wong, ing., Ph.D.

35 Décision et bouclage (2)
GPA435 S.E. et P.S. Nous pouvons tester un ensemble de conditions par des opérateurs logiques et des options de l’instruction if #!/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/affiche if [ -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" fi echo "$NOMFICHIER n'existe pas" Consulter man test ou les notes de cours chapitre 6 pour connaître les opérateurs logiques et options disponibles 35 Présentation préaprée par T. Wong, ing., Ph.D.

36 Décision et bouclage (3)
GPA435 S.E. et P.S. Décision et bouclage (3) Instruction for - done Cette instruction sert à boucler: Sur les paramètres de position; OU Sur une liste de paramètres donnés directement dans le programme. Attention! L’instruction for – done ne ressemble pas à celle des langages classiques (basic, C, MATLAB, etc.) 36 Présentation préaprée par T. Wong, ing., Ph.D.

37 Décision et bouclage (4)
GPA435 S.E. et P.S. Instruction for – done Bouclage sur les paramètres de position #!/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 0 echo "Pas de paramètres de position ;((" exit 1 Variable qui recevra tour à tour les paramètres de position données à la ligne de commande 37 Présentation préaprée par T. Wong, ing., Ph.D.

38 Décision et bouclage (5)
GPA435 S.E. et P.S. Instruction for – done Bouclage sur les paramètres de position 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. 38 Présentation préaprée par T. Wong, ing., Ph.D.

39 Décision et bouclage (6)
GPA435 S.E. et P.S. Instruction for – done Bouclage sur une liste de paramètres donnés dans le programme #!/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" fi done 39 Présentation préaprée par T. Wong, ing., Ph.D.

40 Décision et bouclage (7)
GPA435 S.E. et P.S. Instruction for – done Bouclage sur une liste de paramètres donnés dans le programme 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. 40 Présentation préaprée par T. Wong, ing., Ph.D.

41 Décision et bouclage (8)
GPA435 S.E. et P.S. Décision et bouclage (8) Instruction case - esac Sémantiquement case – esac est un ensemble de if – then – else mais organisée d’une manière structurée. La syntaxe de cette instruction: case var in descripteur [| descripteur] ) cmds ;; esac var est une variable dont le contenu est à tester; descripteur est une expression qui sert de comparaison; cmds sont des commandes à exécuter si le résultat de la comparaison est vrai. 41 Présentation préaprée par T. Wong, ing., Ph.D.

42 Décision et bouclage (9)
GPA435 S.E. et P.S. Instruction case - esac Voici la liste des descripteurs de case - esac Descripteur Signification * Une chaîne de caractères quelconque incluant la chaîne vide ? Un caractère quelconque incluant le caractère vide [abcdeFg] Un caractère parmi ceux placés entre crochets (OU-logique implicite) [a-z] Un caractère parmi la gamme de caractères placés entre crochets (OU-logique implicite) [!abcdeFg] [!a-z] Un caractère qui n’est pas ceux placé entre crochets (négation-logique) x abcdeFg Un ou plusieurs caractères donnés explicitement (ET-logique implicite) 42 Présentation préaprée par T. Wong, ing., Ph.D.

43 Décision et bouclage (10)
GPA435 S.E. et P.S. Instruction case - esac #!/bin/bash # Nom du programme: casesac # casesac: montrer l'utilisation de case - esac # traiter les paramètres de position d'une commande if [ $# -eq 0 ]; then echo "usage: casesac -t -q -l nom_du_fichier" exit 1 fi # utiliser case - esac pour traiter les paramètres de position for 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" ;; esac done if [ -f "$NOM_FICH" ]; then echo "Fichier $NOM_FICH existe!" else echo "Fichier $NOM_FICH n'existe pas!" Que signifie le descripteur ? [!-]* Pourquoi le descripteur *) est-il placé à la fin de case – esac dans cet exemple? 43 Présentation préaprée par T. Wong, ing., Ph.D.

44 Décision et bouclage (11)
GPA435 S.E. et P.S. Instruction case - esac [!-]* 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. 44 Présentation préaprée par T. Wong, ing., Ph.D.

45 Décision et bouclage (12)
GPA435 S.E. et P.S. Décision et bouclage (12) Instruction case - esac Voici un exemple de descripteur capable de détecter la présence d’un code postal dans une variable: Code postal Lettre-chiffre-lettre-chiffre-lettre-chiffre Par exemple: H3C1K3 Descripteur [A-Z][0-9][A-Z][0-9][A-Z][0-9] Par contre, le descripteur précédent ne reconnaîtra pas h3C1k3 Nouveau descripteur (bingo!) [A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9] 45 Présentation préaprée par T. Wong, ing., Ph.D.

46 Décision et bouclage (13)
GPA435 S.E. et P.S. Instruction while – do - done La syntaxe de cette instruction est: while [ commandes-test ] do commandes done Il y aura bouclage tant et aussi longtemps que le statut de retour de commandes-test est vrai (égal à 0) Attention! La logique utilisée est la suivante: Égal à zéro  Vrai Différent de zéro  Faux 46 Présentation préaprée par T. Wong, ing., Ph.D.

47 Décision et bouclage (14)
GPA435 S.E. et P.S. Instruction while – do - done #!/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 REPERTOIRE done echo "Merci!" 47 Présentation préaprée par T. Wong, ing., Ph.D.

48 Décision et bouclage (15)
GPA435 S.E. et P.S. Instruction until – do - done La syntaxe de cette instruction est: until [ commandes-test ] do commandes done Il y aura bouclage tant et aussi longtemps que le statut de retour de commandes-test est faux (différent de 0) Attention! La logique utilisée est la suivante: Égal à zéro  Vrai Différent de zéro  Faux 48 Présentation préaprée par T. Wong, ing., Ph.D.

49 Décision et bouclage (16)
GPA435 S.E. et P.S. Instruction until – do - done #!/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 REPERTOIRE done echo "Merci!" On voit très bien que until – do – done est le complément de while – do - done 49 Présentation préaprée par T. Wong, ing., Ph.D.

50 Fin de la première partie du chapitre 6
GPA435 S.E. et P.S. Fin de la première partie du chapitre 6 Présentation préaprée par T. Wong, ing., Ph.D.

51 Références [1] Présentations PowerPoint du cours GPA435, Tony Wong.
[2] Notes de cours, GPA435 [3] Levasseur, Yan, Wiki GPA435: , consulté en avril [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. Jean-Philippe Roberge - Avril 2014


Télécharger ppt "Systèmes d’exploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe."

Présentations similaires


Annonces Google