370 likes | 499 Views
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.
E N D
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. • 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
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
Substitution: variables • Exemple de substitution des variables Même résultat 4
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
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
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
Paramètres d’une commande • Exemple d’utilisation 8
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
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
Paramètres d’une commande • Paramètres de position • Symboles associés 11
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
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
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
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
Lecture et affichage • La commande read(1) Observer bien le contenu de la dernière variable LE_RESTE_DES_EQUIPES 16
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
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
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
Lecture et affichage • Quelques exemples 20
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
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
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
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
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
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
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
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
Décision et bouclage • Instruction case - esac • Voici la liste des descripteurs de case - esac 29
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
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
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
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
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
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
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
Fin de la première partie du chapitre 6