GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et...
-
Upload
sacha-hubert -
Category
Documents
-
view
112 -
download
0
Transcript of GPA435, GPA – ÉTS, T. Wong Génie de la production automatisée GPA435 Système dexploitation et...
GPA435, GPA – ÉTS, T. Wong
Génie de la production automatisée
GPA435 Système d’exploitation et programmation de systèmeChapitre 6Partie I2014
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
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
GPA435, GPA – ÉTS, T. Wong
Substitution: variables
Exemple de substitution des variables
4
Mêmerésultat
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.
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
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
GPA435, GPA – ÉTS, T. Wong
Paramètres d’une commande
Exemple d’utilisation
8
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
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.
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
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
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
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.
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.
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
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.
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.
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.
GPA435, GPA – ÉTS, T. Wong
Lecture et affichage
Quelques exemples
20
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
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
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
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
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.
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
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.
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
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)
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?
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.
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
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
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!"
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
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
GPA435, GPA – ÉTS, T. Wong
Fin de la première partiedu chapitre 6