GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et...

37
GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système d’exploitation et programmation de système Chapitre 6 Partie I 2014

Transcript of GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et...

Page 1: 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

Génie de la production automatisée

GPA435 Système d’exploitation et programmation de systèmeChapitre 6Partie I2014

Page 2: 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. 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:

2

GPA435 $GPA435

Nom de la variable

Contenu de la variable

Page 3: 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

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

o Si la variable est définie et son contenu est non nul.• Substitution vide

o Si la variable n’est pas définie ou son contenu est nul.

3

Lorsqu’une variable est vide (sans aucune donnée) alors son contenu est nul

Page 4: 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

Exemple de substitution des variables

4

Mêmerésultat

Page 5: 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: 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:

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.

Page 6: 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

Paramètres d’une commande

Paramètres de position

commande param1 param2 param2 param4

6

Il s’agit 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 l’interpréteur de commande, le contenu de ces paramètres est représenté par:

$1, $2, $3 jusqu’à $9

Page 7: 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

Paramètres d’une commande

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

Page 8: 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

Paramètres d’une commande

Exemple d’utilisation

8

Page 9: 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

Paramètres d’une commande

Paramètres de position• Nous pouvons manipuler les paramètres de

position:o Le décalage vers la gauche à l’aide 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"shiftecho "Paramètre de position 1: $1"shiftecho "Paramètre de position 1: $1"shiftecho "Paramètre de position 1: $1"

Décaler à gauche d’une position

Page 10: 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

Paramètres d’une commande

Paramètres de position• Nous pouvons manipuler les paramètres de

position:o Le décalage vers la gauche à l’aide 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.

Page 11: 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

Paramètres d’une commande

Paramètres de position• Symboles associés

11

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

Page 12: 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

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

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

Page 13: 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

Lecture et affichage

La commande read(1) réalise la lecture des données à partir de l’entrée standard:read var1 var2 var3

o Lecture de l’entré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 l’interpréteur de commande à l’aide 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

var1 var2 var3 var3

var3

Page 14: 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

Lecture et affichage

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.

Page 15: 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

Lecture et affichage

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.

Page 16: 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

Lecture et affichage

La commande read(1)

16

Observer bien le contenu de la dernière variableLE_RESTE_DES_EQUIPES

Page 17: 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

Lecture et affichage

La commande echo(1) réalise l’affichage à la sortie standard:echo Allo tout le mondeecho $var1 $var2 $var3

o Affiche à la sortie standard le contenu des variables var1, var2 et var3.

echo -e $var1 $var2 $var3o L’option –e permet l’introduction des codes de contrôle

d’affichage

17

\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.

Page 18: 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

Lecture et affichage

La commande echo(1) réalise l’affichage à la sortie standard:

18

\n nouvelle ligne\t tab\r return\b backspace\c continuer l’affichage 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.

Page 19: 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

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

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.

Page 20: 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

Lecture et affichage

Quelques exemples

20

Page 21: 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

Décision et bouclage

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 1fi

if [ "$1" != "-v" ]; then cat "$1" # pas d'option "-v" alors c'est le nom du fichier à afficherelse 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 fifiexit 0 # tout va bien alors donner le code de retour 0

Page 22: 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

Décision et bouclage

Nous pouvons tester un ensemble de conditions par des opérateurs logiques et des options de l’instruction 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/afficheif [ -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" fielse 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

Page 23: 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

Décision et bouclage

Instruction for - done• Cette instruction sert à boucler:

o Sur les paramètres de position;OUo 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.)

23

Page 24: 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

Décision et bouclage

Instruction for – done 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 0else echo "Pas de paramètres de position ;(("fiexit 1

Variable qui recevra tour à tour les paramètres de position données à la ligne de commande

Page 25: 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

Décision et bouclage

Instruction for – done Bouclage sur les paramètres de position

25

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.

Page 26: 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

Décision et bouclage

Instruction for – done 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" fidone

Page 27: 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

Décision et bouclage

Instruction for – done Bouclage sur une liste de paramètres donnés

dans le programme

27

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.

Page 28: 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

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

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

Page 29: 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

Décision et bouclage

Instruction case - esac• Voici la liste des descripteurs de case - esac

29

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)

xabcdeFg

Un ou plusieurs caractères donnés explicitement (ET-logique implicite)

Page 30: 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

Décision et bouclage

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 commandeif [ $# -eq 0 ]; then echo "usage: casesac -t -q -l nom_du_fichier" exit 1fi# utiliser case - esac pour traiter les paramètres de positionfor 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" ;; esacdoneif [ -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?

Page 31: 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

Décision et bouclage

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 l’utilisateur.

Page 32: 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

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:o Code postal

Lettre-chiffre-lettre-chiffre-lettre-chiffrePar 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 pash3C1k3

o Nouveau descripteur (bingo!)[A-Za-z][0-9][A-Za-z][0-9][A-Za-z][0-9]

32

Page 33: 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

Décision et bouclage

Instruction while – do - done• La syntaxe de cette instruction est:

while [ commandes-test ]do 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 VraiDifférent de zéro Faux

Page 34: 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

Décision et bouclage

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 REPERTOIREdoneecho "Merci!"

Page 35: 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

Décision et bouclage

Instruction until – do - done• La syntaxe de cette instruction est:

until [ commandes-test ]do 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 VraiDifférent de zéro Faux

Page 36: 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

Décision et bouclage

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 REPERTOIREdoneecho "Merci!"

On voit très bien queuntil – do – doneest le complément dewhile – do - done

Page 37: 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

Fin de la première partiedu chapitre 6