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 dexploitation et programmation de systèmes -GPA435- Cours #4: Éléments de programmation (Partie 1) Enseignant: Jean-Philippe Roberge Jean-Philippe.

Présentations similaires


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

1 Systèmes dexploitation et programmation de systèmes -GPA435- 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 2 Jean-Philippe Roberge - Mai 2014

3 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

4 4 Concernant lentré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

5 5 Redirection de lentrée et de la sortie standard: cat 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 > FichierSortie La sortie de la commande cat est ajoutée à la fin du fichier FichierSortie cat sortie.txt 2> erreur.txt Les messages d erreur de la commande cat seront enregistrés dans ce fichier

6 6 Tuyaux brancher la sortie standard dune commande à lentrée standard dune autre commande. Révision du cours #3 (4) Exemple: cat document.txt | tr abc ABC > traduit.txt

7 7 Lancer les commandes en arrière-plan: commande [-options] [paramètre] & Symbole indiquant une exécution en arrière-plan dune commande Révision du cours #3 (5) 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 dune ligne de commandes par regroupement: (cmd1 ; cmd2) ; cmd3 (cmd1 ; cmd2) & cmd3 Plusieurs combinaisons sont possibles

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

9 9 Conditions dun 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 dun fichier de commande: sh FichierCommande contient à la première ligne du fichier la directive: #!/bin/sh Démonstration de la procédure Démonstration de la procédure Révision du cours #3 (7)

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

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

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

13 13 Révision du cours #3 (11) Comment faire « planter » un système dexploitation Linux à laide de linterpréteur de commandes ? En créant un processus qui créé récursivement des processus… Cest-à-dire: Démonstration de la procédure Démonstration de la procédure linux-commands.htmlhttp://www.junauza.com/2008/11/7-deadly- linux-commands.html ; deadly-commands-you-should-never-run- on-linux/

14 Jean-Philippe Roberge - Mai Cours #4

15 Une variable est identifiée par son nom. Une variable est identifiée par son nom. Le contenu de la variable Le 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 symbole $ placé devant le nom. Le contenu de la variable est identifié par le symbole $ placé devant le nom. Par exemple: Par exemple: 15 GPA435$GPA435 Nom de la variable Contenu de la variable Substitution de variable (1) 15

16 Linterpréteur de commande réalisera la substitution du contenu dune variable lorsquil rencontre le symbole $ suivi dun nom de variable. Linterpréteur de commande réalisera la substitution du contenu dune variable lorsquil rencontre le symbole $ suivi dun nom de variable. Deux résultats possibles: Deux résultats possibles: Substitution du contenu Substitution du contenu o Si la variable est définie et son contenu est non nul. Substitution vide Substitution vide o Si la variable nest pas définie ou son contenu est nul. 16 Lorsquune variable est vide (sans aucune donnée) alors son contenu est nul Substitution de variable (2) 16

17 Exemple de substitution des variables Exemple de substitution des variables Même résultat Substitution de variable (3) 17

18 Il est possible dassigner le résultat dune ligne de commandes à une variable. Il est possible dassigner le résultat dune ligne de commandes à une variable. Pour ce faire, entourer les commandes par les caractères ` ` (accents grave). Pour ce faire, entourer les commandes par les caractères ` ` (accents grave). Voici la substitution des commandes à lœuvre: Voici la substitution des commandes à 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

19 Paramètres de position Paramètres de position commande param1 param2 param2 param4 19 Il sagit 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 linterpréteur de commande, le contenu de ces paramètres est représenté par: $1, $2, $3 jusquà $9 Paramètres dune commande (1) 19

20 Paramètres de position Paramè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 dune commande (2) 20

21 Exemple dutilisation Exemple dutilisation 21 Paramètres dune commande (3) 21

22 Paramètres de position Paramètres de position Nous pouvons manipuler les paramètres de position: Nous pouvons manipuler les paramètres de position: o Le décalage vers la gauche à laide de shift 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" shift echo "Paramètre de position 1: $1" shift echo "Paramètre de position 1: $1" shift echo "Paramètre de position 1: $1" Décaler à gauche dune position Paramètres dune commande (4) 22

23 Paramètres de position Paramètres de position Nous pouvons manipuler les paramètres de position: Nous pouvons manipuler les paramètres de position: o Le décalage vers la gauche à laide de shift 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 dune commande (5) 23

24 Paramètres de position Paramètres de position Symboles associés Symboles associés 24 SymboleSignification $0 Nom de la commande $1 à $9 Contenu des paramètres de position de la commande $$ Numéro de processus (PID) de linterpréteur de commande qui exécute la commande $# Nombre de paramètres de position Contenu de la ligne de commande Paramètres dune commande (6) 24

25 Ces variables sont prédéfinies par linterpréteur de commande et sont disponibles pour les programmes utilisateurs Ces variables sont prédéfinies par linterpréteur de commande et sont disponibles pour les programmes utilisateurs 25 VariablesSignification $? Létat de terminaison de la dernière commande exécutée $HOME Le chemin de répertoire menant vers le dossier de lutilisateur $PATH Le chemin de fouille pour les programmes et commandes $USER Le nom dutilisateur $HOSTNAME Le nom de lordinateur $OSTYPE Le nom du système dexploitation $UID Le numéro de lutilisateur $* Contenu de la ligne de commande Variable de linterpréteur 25

26 La commande read(1) réalise la lecture des données à partir de lentrée standard: La commande read(1) réalise la lecture des données à partir de lentrée standard: read var1 var2 var3 o Lecture de lentrée standard et place les données dans les variables var1, var2 et var3. o La séparation des données en champs est réalisée par linterpréteur de commande à laide de la variable IFS (Internal Field Separator). o IFS contient habituellement les caractères espace, tab et ENTER. 26 voici une-ligne de données ! Il y a 5 champs var1var2var3 Lecture et affichage (1) 26

27 La commande read(1) La commande 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

28 La commande read(1) La commande 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

29 La commande read(1) La commande read(1) 29 Observer bien le contenu de la dernière variable LE_RESTE_DES_EQUIPES Lecture et affichage (4) 29

30 La commande echo(1) réalise laffichage à la sortie standard: La commande echo(1) réalise laffichage à la sortie standard: echo Allo tout le monde echo $var1 $var2 $var3 o Affiche à la sortie standard le contenu des variables var1, var2 et var3. echo -e $var1 $var2 $var3 o Loption –e permet lintroduction des codes de contrôle daffichage 30 \n nouvelle ligne \t tab \r return \b backspace \c continuer laffichage 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

31 La commande echo(1) réalise laffichage à la sortie standard: La commande echo(1) réalise laffichage à la sortie standard: 31 \n nouvelle ligne \t tab \r return \b backspace \c continuer laffichage sur la même ligne Pourquoi ce résultat? Lecture et affichage (6) 31

32 La commande printf(1) réalise laffichage à la sortie standard: La commande printf(1) réalise laffichage à la sortie standard: printf "Allo tout le monde\n" printf "%s\t%s\t%s\n" $var1 $var2 $var3 o 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. o 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: 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

33 Quelques exemples Quelques exemples 33 Lecture et affichage (8) 33

34 Instruction if – then - else - fi Instruction 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 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 else echo "Nom du fichier à affiche est manquant" exit 1 # erreur alors donner le code de retour 1 fi exit 0 # tout va bien alors donner le code de retour 0 Décision et bouclage (1) 34

35 Nous pouvons tester un ensemble de conditions par des opérateurs logiques et des options de linstruction if Nous pouvons tester un ensemble de conditions par des opérateurs logiques et des options de linstruction if 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/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 else 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

36 Instruction for - done Instruction for - done Cette instruction sert à boucler: Cette instruction sert à boucler: o Sur les paramètres de position; OU o Sur une liste de paramètres donnés directement dans le programme. Attention! Linstruction for – done ne ressemble pas à celle des langages classiques (basic, C, MATLAB, etc.) Attention! Linstruction for – done ne ressemble pas à celle des langages classiques (basic, C, MATLAB, etc.) 36 Décision et bouclage (3) 36

37 Instruction for – done Instruction for – done Bouclage sur les paramètres de position Bouclage 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 0 else echo "Pas de paramètres de position ;((" fi exit 1 Variable qui recevra tour à tour les paramètres de position données à la ligne de commande Décision et bouclage (4) 37

38 Instruction for – done Instruction for – done Bouclage sur les paramètres de position Bouclage sur les paramètres de position 38 Dans cet exemple, linstruction 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

39 Instruction for – done Instruction for – done Bouclage sur une liste de paramètres donnés dans le programme Bouclage sur une liste de paramètres donnés dans 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" fi done Décision et bouclage (6) 39

40 Instruction for – done Instruction for – done Bouclage sur une liste de paramètres donnés dans le programme Bouclage sur une liste de paramètres donnés dans le programme 40 Dans cet exemple, linstruction 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

41 Instruction case - esac Instruction case - esac Sémantiquement case – esac est un ensemble de if – then – else mais organisée dune manière structurée. Sémantiquement case – esac est un ensemble de if – then – else mais organisée dune manière structurée. La syntaxe de cette instruction: La syntaxe de cette instruction: case var in descripteur [| descripteur] ) cmds ;; descripteur [| descripteur] ) cmds ;;esac o var est une variable dont le contenu est à tester; o descripteur est une expression qui sert de comparaison; o cmds sont des commandes à exécuter si le résultat de la comparaison est vrai. 41 Décision et bouclage (8) 41

42 Instruction case - esac Instruction case - esac Voici la liste des descripteurs de case - esac Voici la liste des descripteurs de case - esac 42 Descripteu r 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 nest pas ceux placé entre crochets (négation-logique) xabcdeFg Un ou plusieurs caractères donnés explicitement (ET- logique implicite) Décision et bouclage (9) 42

43 Instruction case - esac Instruction case - esac 43 #!/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!" 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

44 Instruction case - esac Instruction case - 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 lutilisateur. Décision et bouclage (11) 44

45 Instruction case - esac Instruction case - esac Voici un exemple de descripteur capable de détecter la présence dun code postal dans une variable: Voici un exemple de descripteur capable de détecter la présence dun code postal dans une variable: o Code postal Lettre-chiffre-lettre-chiffre-lettre-chiffre Par exemple: H3C1K3 o Descripteur [A-Z][0-9][A-Z][0-9][A-Z][0-9] o Par contre, le descripteur précédent ne reconnaîtra pas h3C1k3 o Nouveau descripteur (bingo!) [A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9] 45 Décision et bouclage (12) 45

46 Instruction while – do - done Instruction while – do - done La syntaxe de cette instruction est: La syntaxe de cette instruction est: while [ commandes-test ] do commandes commandesdone o Il y aura bouclage tant et aussi longtemps que le statut de retour de commandes-test est vrai (égal à 0) 46 Attention! La logique utilisée est la suivante: Égal à zéro Vrai Différent de zéro Faux Décision et bouclage (13) 46

47 Instruction while – do - done Instruction while – 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 REPERTOIRE done echo "Merci!" Décision et bouclage (14) 47

48 Instruction until – do - done Instruction until – do - done La syntaxe de cette instruction est: La syntaxe de cette instruction est: until [ commandes-test ] do commandes commandesdone o Il y aura bouclage tant et aussi longtemps que le statut de retour de commandes-test est faux (différent de 0) 48 Attention! La logique utilisée est la suivante: Égal à zéro Vrai Différent de zéro Faux Décision et bouclage (15) 48

49 Instruction until – do - done Instruction until – 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 REPERTOIRE done echo "Merci!" On voit très bien que until – do – done est le complément de while – do - done Décision et bouclage (16) 49

50 Fin de la première partie du chapitre 6

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 2014.http://bash.leyan.org/Accueil [4] Tanenbaum, A.S., Systèmes dexploitation. Pearson Education France, [5] Stallings, W., Operating Systems : Internals and Design Principals. Upper Saddle River, NJ : Prentice Hall, [6] Références citées dans le premier chapitre des notes de cours. 51 Jean-Philippe Roberge - Avril 2014


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

Présentations similaires


Annonces Google