1 / 37

Génie de la production automatisée GPA435 Système d’exploitation et programmation de système

Génie de la production automatisée GPA435 Système d’exploitation et programmation de système Chapitre 6 Partie I 2014. Substitution: variables. Une variable est identifiée par son nom. Le contenu de la variable Une variable est identifiée par son nom.

liona
Download Presentation

Génie de la production automatisée GPA435 Système d’exploitation et programmation de système

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Génie de la production automatisée GPA435 Système d’exploitation et programmation de système Chapitre 6 Partie I 2014

  2. Substitution: variables • Une variable est identifiée par son nom. • Le contenu de la variable • Une variable est identifiée par son nom. • 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 2

  3. Substitution: variables • 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 3

  4. Substitution: variables • Exemple de substitution des variables Même résultat 4

  5. Substitution: commandes • 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. 5

  6. Paramètres d’une commande • 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, $3jusqu’à$9 Il s’agit du nom de la commande. Le nom de la commande est représenté par le paramètre de position $0. 6

  7. Paramètres d’une commande • 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 7

  8. Paramètres d’une commande • Exemple d’utilisation 8

  9. Paramètres d’une commande • 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 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 d’une position 9

  10. Paramètres d’une commande • 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. 10

  11. Paramètres d’une commande • Paramètres de position • Symboles associés 11

  12. Variables de l’interpréteur • Ces variables sont prédéfinies par l’interpréteur de commande et sont disponibles pour les programmes utilisateurs 12

  13. Lecture et affichage • 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 var3 var1 var2 var3 13

  14. Lecture et affichage • 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. 14

  15. Lecture et affichage • 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. 15

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

  17. Lecture et affichage • 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. 17

  18. Lecture et affichage • 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’affichagesur la mêmeligne Réponse: Lire la ligne de commande débutant par la gauche et interpréter les codes de contrôle. 18

  19. Lecture et affichage • 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 nombredécimalsigné %u  nombredé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. 19

  20. Lecture et affichage • Quelques exemples 20

  21. Décision et bouclage • 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 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 fi exit 0 # tout va bien alors donner le code de retour 0 21

  22. Décision et bouclage • 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 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 22

  23. Décision et bouclage • 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 – donene ressemble pas à celle des langages classiques (basic, C, MATLAB, etc.) 23

  24. Décision et bouclage • 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 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 24

  25. Décision et bouclage • 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. 25

  26. Décision et bouclage • 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 26

  27. Décision et bouclage • 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. 27

  28. Décision et bouclage • 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; • descripteurestune expression qui sert de comparaison; • cmdssont des commandes à exécutersi le résultat de la comparaisonestvrai. 28

  29. Décision et bouclage • Instruction case - esac • Voici la liste des descripteurs de case - esac 29

  30. Décision et bouclage • 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!" fi Que signifie le descripteur ? [!-]* Pourquoi le description *) est-il placé à la fin de case – esac dans cet exemple? 30

  31. Décision et bouclage • 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. 31

  32. Décision et bouclage • 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 descripteurpré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] 32

  33. Décision et bouclage • 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 33

  34. Décision et bouclage • 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!" 34

  35. Décision et bouclage • 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 35

  36. Décision et bouclage • 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 36

  37. Fin de la première partie du chapitre 6

More Related