GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et programmation de système Chapitre 6 Partie I 2014
GPA435, GPA – ÉTS, T. Wong Substitution: variables 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: 2 GPA435$GPA435 Nom de la variable Contenu de la variable
GPA435, GPA – ÉTS, T. Wong Substitution: variables 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. 3 Lorsquune variable est vide (sans aucune donnée) alors son contenu est nul
GPA435, GPA – ÉTS, T. Wong Substitution: variables Exemple de substitution des variables Exemple de substitution des variables 4 Même résultat
GPA435, GPA – ÉTS, T. Wong Substitution: commandes 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: 5 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.
GPA435, GPA – ÉTS, T. Wong Paramètres dune commande Paramètres de position Paramètres de position commande param1 param2 param2 param4 6 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
GPA435, GPA – ÉTS, T. Wong Paramètres dune commande Paramètres de position Paramètres de position 7 $0 ls $1 -lg $2 Downloads $0 cp $1 Downloads/gpa435_ch5.pptx $2 Downloads/GPA435_CH5.pptx $0 ls $1 -l $2 Downloads
GPA435, GPA – ÉTS, T. Wong Paramètres dune commande Exemple dutilisation Exemple dutilisation 8
GPA435, GPA – ÉTS, T. Wong Paramètres dune commande 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 9 #!/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
GPA435, GPA – ÉTS, T. Wong Paramètres dune commande 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 10 Résultat: Les commandes shift ont placé tour à tour les paramètres de position B, c et d dans la variable $1.
GPA435, GPA – ÉTS, T. Wong Paramètres dune commande Paramètres de position Paramètres de position Symboles associés Symboles associés 11 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
GPA435, GPA – ÉTS, T. Wong Variables de linterpréteur 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 12 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
GPA435, GPA – ÉTS, T. Wong Lecture et affichage 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. 13 voici une-ligne de données ! Il y a 5 champs var1var2var3
GPA435, GPA – ÉTS, T. Wong Lecture et affichage La commande read(1) La commande read(1) 14 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.
GPA435, GPA – ÉTS, T. Wong Lecture et affichage La commande read(1) La commande read(1) 15 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.
GPA435, GPA – ÉTS, T. Wong Lecture et affichage La commande read(1) La commande read(1) 16 Observer bien le contenu de la dernière variable LE_RESTE_DES_EQUIPES
GPA435, GPA – ÉTS, T. Wong Lecture et affichage 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 17 \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.
GPA435, GPA – ÉTS, T. Wong Lecture et affichage La commande echo(1) réalise laffichage à la sortie standard: La commande echo(1) réalise laffichage à la sortie standard: 18 \n nouvelle ligne \t tab \r return \b backspace \c continuer laffichage sur la même ligne Pourquoi ce résultat? Réponse: Lire la ligne de commande débutant par la gauche et interpréter les codes de contrôle.
GPA435, GPA – ÉTS, T. Wong Lecture et affichage 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: 19 %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.
GPA435, GPA – ÉTS, T. Wong Lecture et affichage Quelques exemples Quelques exemples 20
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction if – then - else - fi Instruction if – then - else - fi 21 #!/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
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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 22 #!/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
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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.) 23
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction for – done Instruction for – done Bouclage sur les paramètres de position Bouclage sur les paramètres de position 24 #!/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
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction for – done Instruction for – done Bouclage sur les paramètres de position Bouclage sur les paramètres de position 25 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.
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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 26 #!/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
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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 27 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.
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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. 28
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction case - esac Instruction case - esac Voici la liste des descripteurs de case - esac Voici la liste des descripteurs de case - esac 29 DescripteurSignification * 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)
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction case - esac Instruction case - esac 30 #!/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?
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction case - esac Instruction case - esac 31 [!-]* 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.
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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] 32
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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) 33 Attention! La logique utilisée est la suivante: Égal à zéro Vrai Différent de zéro Faux
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction while – do - done Instruction while – do - done 34 #!/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!"
GPA435, GPA – ÉTS, T. Wong Décision et bouclage 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) 35 Attention! La logique utilisée est la suivante: Égal à zéro Vrai Différent de zéro Faux
GPA435, GPA – ÉTS, T. Wong Décision et bouclage Instruction until – do - done Instruction until – do - done 36 #!/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
GPA435, GPA – ÉTS, T. Wong Fin de la première partie du chapitre 6