43
1 GPA435 Systèmes GPA435 Systèmes d’exploitation et d’exploitation et programmation de programmation de système système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et comma paramètres de Bourne shell, éléments de programmation U n ive rs ité d u Q uébec É co le d e te c h n o lo g ie s u p érieu re D é partem e n t de génie de la p ro du ctio n a u to m a tisée

1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

Embed Size (px)

Citation preview

Page 1: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

1

GPA435 Systèmes GPA435 Systèmes d’exploitation et d’exploitation et programmation de programmation de systèmesystème

Copyright, 2000 © Tony Wong, Ph.D., ing.

Chapitre 6Substitution: variables et commandes,

paramètres de Bourne shell,éléments de programmation

Université du Québec

École de technologie supérieureDépartem ent de génie de la production autom atisée

Page 2: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

2

Substitution: variablesSubstitution: variablesUne variable est identifiée par son Une variable est identifiée par son

nom.nom.

Le contenu de la variable est Le contenu de la variable est identifié par le symbole identifié par le symbole $$ placé placé devant le nom.devant le nom.

Par exemple:Par exemple:

Programmation Bourne shell

TOTO $TOTO

N o m d e la v ariab le

C o n ten u d e la v ariab le

Page 3: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

3

Programmation Bourne shell

Substitution: variablesSubstitution: variablesL’interpréteur de commande Bourne L’interpréteur de commande Bourne

shell réalisera la shell réalisera la substitution du substitution du contenu d’une variablecontenu d’une variable lorsqu’il lorsqu’il rencontre le symbole rencontre le symbole $$ suivi d’un suivi d’un nom de variable.nom de variable.

Deux comportements possibles:Deux comportements possibles:Résultat Situation

substitution vide La variable n’est pas définie ou la variable est définie mais son contenu est vide.

Substitution du contenu La variable est définie et son contenu est non nul.

Page 4: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

4

Substitution: variablesSubstitution: variables

Exemples de substitution des Exemples de substitution des variables:variables:

Programmation Bourne shell

$ MSG1="J ean est un "$ MSG2="chi en f or t r éput é"$ echo "$MSG1 $METI ER $MSG2"J ean est un chi en f or t r éput é

$ MSG1="J ean est un "$ MSG2="chi en f or t r éput é"$ METI ER="dresseur de"$ echo "$MSG1 $METI ER $MSG2"J ean est un dresseur de chi en f or t r éput é

$ MSG1="J ean est un "$ MSG2="chi en f or t r éput é"$ METI ER=$ echo "$MSG1 $METI ER $MSG2"J ean est un chi en f or t r éput é

Même résultatMême résultat

Page 5: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

5

Substitution: commandesSubstitution: commandes

L’interpréteur de commande Bourne shell est L’interpréteur de commande Bourne shell est en mesure de substituer le résultat d’une en mesure de substituer le résultat d’une ligne de commandes UNIX.ligne de commandes UNIX.

Le symbole impliqué dans ce genre de Le symbole impliqué dans ce genre de substitution est l’accent grave ( ‘ ).substitution est l’accent grave ( ‘ ).

Exemple:Exemple:

Programmation Bourne shell

$ echo pwdpwd$ echo `pwd`/ expor t / home/ exa/ per sonnel / wong/ DEMO$ echo "Mon r éper t oi re de t ravai l est : `pwd`"Mon réper t oi r e de t ravai l est : / expor t / home/ exa/ per sonnel / wong/ DEMO

pwdpwd ( (print working directoryprint working directory))

Page 6: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

6

$ REPERTOI RE=̀ pwd`$ J ESUI S=̀ who am i `$ MACHI NE=̀ host name`$ echo "Ut i l i sat eur : $J ESUI S\ nRéper t oi r e de t r avai l : $REPERTOI RE\ nMachi ne: \> $MACHI NE"Ut i l i sat eur : wong pt s/ 5 f év 26 17: 22 ( ppp40. et smt l . ca)Réper t oi r e de t r avai l : / expor t / home/ exa/ per sonnel / wong/ DEMOMachi ne: cent i

Substitution: commandesSubstitution: commandes

Il est possible d ’assigner le résultat Il est possible d ’assigner le résultat d ’une ligne de commande UNIX à une d ’une ligne de commande UNIX à une variable. variable.

Voici comment:Voici comment:

Programmation Bourne shell

Assignation du résultat des Assignation du résultat des commandes UNIX à des variablescommandes UNIX à des variables

Symbole anti-slash indiquant la Symbole anti-slash indiquant la continuation de la ligne de commande à la continuation de la ligne de commande à la

ligne suivante ligne suivante

Page 7: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

7

Paramètres de Bourne Paramètres de Bourne shellshellParamètres de position:Paramètres de position:

Programmation Bourne shell

Ce sont des paramètres de position.Ce sont des paramètres de position.

Dans un programme Bourne shell, le Dans un programme Bourne shell, le contenu de ces paramètres de contenu de ces paramètres de position est représenté par:position est représenté par:

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

$ cmd par1 par2 par3 par 4

Il s’agit du nom d’un fichier de Il s’agit du nom d’un fichier de commande Bourne shell. Le nom du commande Bourne shell. Le nom du fichier de commande est représenté fichier de commande est représenté par par $0$0..

Page 8: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

8

cent i 24> cat param#! / bi n/ sh# Nom du fi chi er param# param: mont rer l ' ut i l i sat i on des paramet res Bour ne shel l

# Paramet res de posi t i on# Lancer de fi chi er de commande : param - A - B - Cecho "Numero PI D de l ' i nt erpr et eur de commande: $$"echo "Nom du fi chi er de commande: $0"echo "Nombre de paramet r es: $#"echo "Paramet re 1: $1"echo "Paramet re 2: $2"echo "Paramet re 3: $3"echo "Paramet re 4: $4"echo "Tout e l a l i gne de commande: $@

cent i 25> par am - A - b - CNumero PI D de l ' i nt erpret eur de commande: 17235Nom du fi chi er de commande: param

Nombre de par amet r es: 3Paramet r e 1: - AParamet r e 2: - bParamet r e 3: - CParamet r e 4:Tout e l a l i gne de commande: - A - b –C

Paramètres de Bourne Paramètres de Bourne shellshellExemple de paramètres de position Exemple de paramètres de position

à l’aide d ’un programme Bourne à l’aide d ’un programme Bourne shell:shell:

Programmation Bourne shell

Instructions du Instructions du programme programme param. param. Observez Observez l’utilisation des l’utilisation des paramètres de paramètres de Bourne shellBourne shell

Résultat obtenuRésultat obtenu

Page 9: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

9

Paramètres de Bourne shellParamètres de Bourne shell

Programmation Bourne shell

Les variables systèmes:Les variables systèmes: Ces variables sont pré-définies par le Ces variables sont pré-définies par le

Bourne shell et sont disponibles pour Bourne shell et sont disponibles pour les programmes.les programmes.

Variable Signification

* Contient les paramètres entrés dans la ligne de commandes lors de l’invocationdu fichier de commandes.

0 Nom du fichier de commande.

n Valeur du ne paramètre de la ligne de commande.

@ Le contenu de la ligne de commande.

# Le nombre de paramètres dans la ligne de commandes lors de l’invocation dufichier de commandes.

? L’état de terminaison (un numéro) de la dernière commande exécutée.

$ Le numéro du processus PID correspondant à l’interpréteur de commande.

! Le numéro du processus PID correspondant à la dernière tâche exécutant àl’arrière plan.

Uti

liser

le s

ym

bole

$

Uti

liser

le s

ym

bole

$

pou

r ob

tenir

leu

r p

ou

r ob

tenir

leu

r co

nte

nu

con

tenu

Page 10: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

10

Paramètres de Bourne shellParamètres de Bourne shell

Programmation Bourne shell

Les variables systèmes (suite):Les variables systèmes (suite):Variable Signification

HOME Répertoire de travail de l’utilisateur.

PATH Chemins de fouille pour trouver une commande, un programme. Les cheminssont séparés par le caractère : .

MAI L Chemin indiquant la boîte de courriers de l’utilisateur.

PS1 Le caractère représentant le curseur. Par défaut, le caractère $ joue le rôle decurseur.

PS2 Lorsqu’une commande s’étend sur plus d’une ligne, l’interpréteur decommande affiche un second caractère pour indiquer qu’il faut continuerl’entrée. Par défaut c’est le caractère > qui est contenu dans cette variable.

IFS Les caractères qui jouent le rôle de séparateur des commandes. En plus descaractères espace et TAB, l’interpréteur considère les caractères contenus dansIFS comme séparateurs supplémentaires.

CDPATH Le contenu de cette variable modifie le comportement de la commande

cd( 1) . Voir le manuel en-ligne pour les détails de cette commande.

TZ Cette variable indique la zone horaire (Time Zone) utilisée.Uti

liser

le s

ym

bole

$

Uti

liser

le s

ym

bole

$

pou

r ob

tenir

leu

r p

ou

r ob

tenir

leu

r co

nte

nu

con

tenu

Page 11: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

11

Lecture et affichageLecture et affichageLa commande La commande read(1)read(1) réalise la lecture à partir de l’entrée réalise la lecture à partir de l’entrée

standard:standard:read var1 var2 var3read var1 var2 var3

Lecture de l’entrée standard et placer les données dans les variables Lecture de l’entrée standard et placer les données dans les variables var1var1, , var2var2 et et var3var3..

La séparation des données d’entrée en champs est réalisée par le La séparation des données d’entrée en champs est réalisée par le Bourne shell à l’aide de la variable Bourne shell à l’aide de la variable IFSIFS ( (Internal Field SeparatorInternal Field Separator).).

voici une-ligne de donneesvoici une-ligne de donnees

Il existe 4 champs.Il existe 4 champs.

Programmation Bourne shell

Page 12: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

12

Lecture et affichageLecture et affichage

Programmation Bourne shell

Exemple d’utilisation de Exemple d’utilisation de read(1)read(1)::cent i 6> cat l ect ure#! / bi n/ sh# nom du fi chi er : l ect ur e# l ect ur e: mont rer comment l i r e une donnee à par t i r de l ' ent r ee st andard

echo "Les r eper t oi r es de l ' i nst al l at i on? \ c"read REPERTOI RE1 REPERTOI RE2 REPERTOI RE3echo "Merci ! "echo "L' ent ree l ue: $REPERTOI RE1\ n$REPERTOI RE2\ n$REPERTOI RE3"

•La lecture est réalisée à partir de La lecture est réalisée à partir de l’entrée standard.l’entrée standard.•Les données lues sont placées Les données lues sont placées dans trois variables (dans trois variables (REPERTOIRE1REPERTOIRE1, , REPERTOIRE2REPERTOIRE2 et et REPERTOIRE3REPERTOIRE3).).•Le programme terminé son Le programme terminé son exécution par l ’affichage des exécution par l ’affichage des données lues.données lues.

Page 13: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

13

Lecture et affichageLecture et affichage

Programmation Bourne shell

cent i 34> l ect ureLes reper t oi r es de l ' i nst al l at i on? / t ot oMerci !L' ent ree l ue: / t ot ocent i 35> l ect ureLes reper t oi r es de l ' i nst al l at i on? / t ot o / t at a / mi nouMerci !L' ent ree l ue: / t ot o/ t at a/ mi noucent i 36> l ect ureLes reper t oi r es de l ' i nst al l at i on? / t ot o / t at a / mi nou / coco / l oul ouMerci !L' ent ree l ue: / t ot o/ t at a/ mi nou / coco / l oul oucent i 37> l ect ureLes reper t oi r es de l ' i nst al l at i on? / t ot o / t at a / mi nou / coco \/ l oul ouMerci !L' ent ree l ue: / t ot o/ t at a/ mi nou / coco / l oul ou

Les résultats obtenus. Observer Les résultats obtenus. Observer bien la façon dont les données sont bien la façon dont les données sont assignées aux variables.assignées aux variables.

Page 14: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

14

Décision et bouclageDécision et bouclage Instruction Instruction if - elsif - fiif - elsif - fiVoici un exemple:Voici un exemple:

Programmation Bourne shell

1 #! / bi n/ sh2 # Nom du fi chi er affi che3 # affi che: demont rer l ' ut i l i sat i on de l ' i nst ruct i on i f45 i f [ $# = 0 ] # aucun paramet re . . .6 t hen7 echo "Usage: affi che [ - v] NomFi chi er " 1>&28 echo " - v ut i l i se l a commande more" 1>&29 exi t 110 fi1112 i f [ "$1" ! = "- v" ]13 t hen14 cat "$@" # pas d' opt i on - v al or s c' est l e nom du fi chi er15 el se16 shi f t # debar rasser l ' opt i on - v17 mor e "$@"18 fi

Instruction if - fiInstruction if - fi

Instruction Instruction

if - else - fiif - else - fi

L ’instruction if teste le statut de retour des L ’instruction if teste le statut de retour des commandes.commandes.

La logique: vrai = 0, faux La logique: vrai = 0, faux 0 (différent de zéro). 0 (différent de zéro).

Page 15: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

15

Décision et bouclageDécision et bouclageDans le programme précédent, nous Dans le programme précédent, nous

avons utilisé la commande avons utilisé la commande shift(1)shift(1)..Voici une explication de son rôle:Voici une explication de son rôle:

Programmation Bourne shell

-v toto.txt lolo.txt

toto.txt lolo.txt

lolo.txt

$@ ®

$@ ®

$@ ®

$1 $2 $3

$1 $2

shift

shift

$1

La commande La commande shift(1)shift(1) agit sur les agit sur les paramètres de paramètres de position de Bourne position de Bourne shell.shell.

Page 16: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

16

Décision et bouclageDécision et bouclageNous pouvons tester un ensemble Nous pouvons tester un ensemble

de conditions à l ’aide de de conditions à l ’aide de if(1)if(1).. Voir les notes de cours à la page 124. Voir les notes de cours à la page 124.

Voici un exemple:Voici un exemple:

Programmation Bourne shell

1 #! / bi n/ sh2 # Nom du fi chi er : i f t est3 # i f t est : demont rer l ' ut i l i sat i on des opt i ons et operat eur de i f et de t est45 # voi r si l e fi chi er d’ act i on t ermi nal . dt exi st e . . .6 NOMFI CH=$HOME/ . dt / t ypes/ Termi nal . dt7 i f [ - f $NOMFI CH ]8 t hen9 # voi r s’ i l possède l es permi ssi ons l ect ure ou écr i t ure mai s pas d’ execut i on10 i f [ \ ( - r "$NOMFI CH" –o –w "$NOMFI CH" \ ) –a ! –x "$NOMFI CH" ]11 t hen12 echo "$NOMFI CH accessi bl e en l ect ure ou ecr i t ure"13 fi14 el se15 echo "$NOMFI CH n’ exi st e pas"16 fi

Page 17: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

17

Décision et bouclageDécision et bouclage Instruction Instruction for - donefor - done Cette instruction sert à boucler:Cette instruction sert à boucler:

sur les paramètres de position sur les paramètres de position

OUOU sur une liste de paramètres donnée sur une liste de paramètres donnée

directement dans le programmedirectement dans le programme

Attention! L’instruction Attention! L’instruction for - donefor - done ne ne ressemble pasressemble pas à celle des langages à celle des langages procédurals (ex: Basic, Pascal, C, etc.).procédurals (ex: Basic, Pascal, C, etc.).

Programmation Bourne shell

Page 18: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

18

Décision et bouclageDécision et bouclage Voici un exemple de son utilisation à Voici un exemple de son utilisation à

l ’aide d’une liste de paramètres l ’aide d’une liste de paramètres donnés explicitement dans le donnés explicitement dans le programme:programme:

Programmation Bourne shell

1 #! / bi n/ sh2 # Nom du fi chi er : f or t est3 # f or t est : demont rer l ' ut i l i sat i on de l ’ i nst ruct i on f or45 # voi r si l es fi chi er s f t p. dt , f r p. m. pm, f t p. t . pm et f t p exi st ent . . .6 ACTI ON=$HOME/ . dt / t ypes/ f t p. dt7 I CONm=$HOME/ . dt / i cons/ f t p. m. pm8 I CONt =$HOME/ . dt / i cons/ f t p. t . pm9 LI EN=$HOME/ f t p10 # Boucl age11 f or nomfi ch i n "$ACTI ON" "$I CONm" "$I CONt " "$LI EN"12 do13 i f [ - f $nomfi ch ]14 t hen15 echo "$nomfi ch exi st e"16 el se17 echo "$nomfi ch n’ exi st e pas"18 fi19 done

Liste de paramètres Liste de paramètres donnés directement à donnés directement à l ’instruction l ’instruction for - donefor - done

Page 19: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

19

Décision et bouclageDécision et bouclage Un exemple utilisant les paramètres Un exemple utilisant les paramètres

de position:de position:

Programmation Bourne shell

1 #! / bi n/ sh2 # Nom du fi chi er : f or t est 23 # f or t est 2: mont rer l ' ut i l i sat i on de l ’ i nst ruct i on f or i t ér ant sur l es4 # paramèt res de posi t i on d’ une l i gne de commande56 # voi r si l es fi chi er s donnes a l a l i gne de commande exi st ent . . .7 i f [ $# ! = 0 ]8 t hen9 # boucl age sur l es paramet res de posi t i on10 f or nomfi ch11 do12 i f [ - f $nomfi ch ]

13 t hen14 echo "$nomfi ch exi st e"15 el se16 echo "$nomfi ch n’ exi st e pas"17 fi18 done19 el se20 echo "Pas de paramet res de posi t i on"21 fi

Pour obtenir le même Pour obtenir le même résultat que l’exemple résultat que l’exemple précédent, vous devez précédent, vous devez lancer le programme de la lancer le programme de la manière suivante:manière suivante:fortest2 \ $HOME/.dt/types/ftp.dt\ $HOME/.dt/types/ftp.m.pm \ $HOME/.dt/types/ftp.t.pm\ $HOME/ftp

Page 20: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

20

Décision et bouclageDécision et bouclage Instruction Instruction case - esaccase - esac Il s’agit d’un ensemble de Il s’agit d’un ensemble de if - elsif - fiif - elsif - fi mais mais

organisé d’une manière structurée.organisé d’une manière structurée. La syntaxe de cette instruction ressemble La syntaxe de cette instruction ressemble

à ceci:à ceci:

varvar est le contenu d’une variable. est le contenu d’une variable. descripteurdescripteur est une expression générique est une expression générique

simple.simple.

Programmation Bourne shell

case var i n descr i pt eur 1 [ | descr i pt eur 2] ) commandes ; ;esac

Page 21: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

21

Décision et bouclageDécision et bouclage

Programmation Bourne shell

Voici la liste des descripteurs de Voici la liste des descripteurs de case case - esac- esac::

descripteur Signification

* une chaîne de caractères quelconque incluant la chaîne vide.

? un caractère quelconque excluant le caractère vide.

[ …] un caractère parmi ceux placés entre crochets (OU-loique implicite).

[ a- z] un caractère parmi la plage des caractères spécifiée entre crochets (OU-logiqueimplicite).

[ ! …] tous les caractères excluant ceux placés entre crochets.

x un ou plusieurs caractère donnés explicitement.

Page 22: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

22

Décision et bouclageDécision et bouclage Voici un exemple qui peut nous aider Voici un exemple qui peut nous aider

à mieux comprendre cette instruction:à mieux comprendre cette instruction:

Programmation Bourne shell

1 #! / bi n/ sh2 # Nom du fi chi er : casesac3 # casesac: mont r er l ' ut i l i sat i on de l ’ i nst r uct i on case - esac45 # t r ai t er l es opt i ons d’ une commande6 i f [ $# = 0 ]7 t hen8 echo "Usage : casesac –t –q –l NomFi ch"9 exi t 110 fi

11 # ut i l i ser case – esac pour t r ai t er l es opt i ons12 f or opt i on13 do14 case "$opt i on" i n15 - t ) echo "opt i on –t r ecu" ; ;16 - q) echo "opt i on –q r ecu" ; ;17 - l ) echo "opt i on –l r ecu" ; ;18 [ ! - ] *) i f [ - f $opt i on ]19 t hen20 echo "fi chi er $opt i on t r ouve"21 el se22 echo "fi chi er $opt i on i nt r ouvabl e"23 fi24 ; ;25 *) echo "opt i on i nconnue $opt i on recont ree"26 esac27 done

Voici une façon Voici une façon (simpliste) qui permet (simpliste) qui permet le décodage des le décodage des options reçues d’un options reçues d’un programme.programme.

Quel est le rôle du Quel est le rôle du descripteur descripteur [!-]*[!-]* et et celui de celui de **

Page 23: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

23

Décision et bouclageDécision et bouclage

Programmation Bourne shell

Voici un exemple de descripteur Voici un exemple de descripteur capable de détecter la présence d ’un capable de détecter la présence d ’un code postal dans une variable: code postal dans une variable: Code postal:Code postal:

lettre-chiffre-lettre-chiffre-lettre-chiffrelettre-chiffre-lettre-chiffre-lettre-chiffre

Ex: H1L4C9Ex: H1L4C9 Descripteur:Descripteur:

[A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9][A-Z][0-9]

Page 24: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

24

Décision et bouclageDécision et bouclage Instruction Instruction while - dowhile - do La syntaxe de cette instruction est:La syntaxe de cette instruction est:

while [ commandes-test ]while [ commandes-test ]dodo

commandescommandesdonedone

Il y aura bouclage Il y aura bouclage tant et aussi tant et aussi longtempslongtemps que le statut de retour de que le statut de retour de commandes-test est commandes-test est vraivrai (égal à 0). (égal à 0).

Programmation Bourne shell

Page 25: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

25

Décision et bouclageDécision et bouclage Voici un exemple d’utilisation:Voici un exemple d’utilisation:

Programmation Bourne shell

1 #! / bi n/ sh2 Nom du fi chi er : whi l et est3 whi l et est : mont r er l ' ut i l i sat i on de l a boucl e whi l e45 #Boucl er et demander a l ' ut i l i sat eur un reper t oi r e QUI6 #doi t exi st er .78 REPERTOI RE=""9 whi l e [ ! - d "$REPERTOI RE" ]10 do11 echo "Ent rer un nom de reper t oi r e exi st ant : \ c"12 r ead REPERTOI RE13 done14 echo "Merci ! "

On doit comprendre que le On doit comprendre que le programme bouclera tant et aussi programme bouclera tant et aussi longtemps que le nom de répertoire longtemps que le nom de répertoire donné n’est pas un répertoire valide.donné n’est pas un répertoire valide.

Page 26: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

26

Décision et bouclageDécision et bouclage Instruction Instruction until - dountil - do La syntaxe de cette instruction est:La syntaxe de cette instruction est:

until [ commandes-test ]until [ commandes-test ]dodo

commandescommandesdonedone

Il y aura bouclage Il y aura bouclage tant et aussi tant et aussi longtempslongtemps que le statut de retour de que le statut de retour de commandes-testcommandes-test est est fauxfaux (non nul). (non nul).

Programmation Bourne shell

Page 27: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

27

Décision et bouclageDécision et bouclage Voici un exemple d’utilisation:Voici un exemple d’utilisation:

Programmation Bourne shell

#! / bi n/ sh# Nom du fi chi er : unt i l t est# unt i l t est : mont r er l ' ut i l i sat i on de l a boucl e unt i l

# Boucl er et demander a l ' ut i l i sat eur un reper t oi r e QUI# doi t exi st er .

REPERTOI RE=""unt i l [ - d "$REPERTOI RE" ]do echo "Ent rer un nom de reper t oi r e exi st ant : \ c" r ead REPERTOI REdoneecho "Merci ! "

On voit très bien que l’instruction On voit très bien que l’instruction until until - do- do est le complément de est le complément de while - dowhile - do..

Nous avons simplement éliminé la Nous avons simplement éliminé la négation négation !! devant le test devant le test -d-d..

Page 28: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

28

Fonctions Bourne shellFonctions Bourne shell Nous pouvons rendre la programmation Nous pouvons rendre la programmation

plus structurée en utilisant des fonctions.plus structurée en utilisant des fonctions. La syntaxe est:La syntaxe est:

NomDeFonction ( )NomDeFonction ( )

{{

commandescommandes

}}

Une fonction Bourne shell joue le rôle Une fonction Bourne shell joue le rôle d’une sous-routine.d’une sous-routine.

Programmation Bourne shell

Page 29: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

29

Fonctions Bourne shellFonctions Bourne shell Un résumé des caractéristiques :Un résumé des caractéristiques :

Syntaxe:Syntaxe:

NomDeFonction () { commandes }NomDeFonction () { commandes } définition des fonctions Bourne shell: au définition des fonctions Bourne shell: au

début du fichier de commande;début du fichier de commande; prend préséance sur les commandes prend préséance sur les commandes

systèmes de même nom;systèmes de même nom; peut avoir une valeur de retour: peut avoir une valeur de retour: exit nexit n où où nn

est une valeur numérique (=0 est une valeur numérique (=0 ®® OK, OK, 0 0 ®® Erreur).Erreur).

Programmation Bourne shell

Page 30: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

31

Fonctions Bourne shellFonctions Bourne shell Fonction et paramètres de position:Fonction et paramètres de position:

Programmation Bourne shell

P rogram m e pr og

Fonct i onA

Fonct i onB

R este du program m e

pr og - l - q / Par ano

D ispon ib le au program m e d irectem entsous fo rm e de $* , $@, $1, $2, e tc.

D ispon ib le aux fonctions parpassage de param ètresseu lem ent:Funct i onA "$@"Funct i onB "$@"

Page 31: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

32

Neutralisation des Neutralisation des caractèrescaractères Certains caractères ont des significations Certains caractères ont des significations

particulières pour l’interpréteur de particulières pour l’interpréteur de commandes.commandes. Par exemple: Par exemple: &&, , ((, , )), , **, , !!, , {{, , }}, etc., etc.

Cependant, à cause du nombre limité de Cependant, à cause du nombre limité de caractères, certaines commandes et caractères, certaines commandes et programmes réutilisent ces mêmes programmes réutilisent ces mêmes caractères mais à d’autres fins.caractères mais à d’autres fins. Par exemple: Par exemple: &&&& (ET-logique), (ET-logique), **

(multiplication), (multiplication), !! (négation), etc. (négation), etc.

Programmation Bourne shell

Page 32: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

33

Neutralisation des Neutralisation des caractèrescaractères Sans un mécanisme d’échappement, ces Sans un mécanisme d’échappement, ces

caractères spéciaux seront interprétés caractères spéciaux seront interprétés par le Bourne shell.par le Bourne shell.

Les commandes et programmes qui Les commandes et programmes qui utilisent ces caractères spéciaux ne utilisent ces caractères spéciaux ne pourront pas s’exécuter correctement.pourront pas s’exécuter correctement.

D’où la nécessité de D’où la nécessité de neutraliserneutraliser la la signification particulière de ces signification particulière de ces caractères spéciaux pour le Bourne shell.caractères spéciaux pour le Bourne shell.

Programmation Bourne shell

Page 33: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

34

Neutralisation des Neutralisation des caractèrescaractères Voici un exemple:Voici un exemple: Nous désirons afficher la chaîne de Nous désirons afficher la chaîne de

caractère "TOTO & TATA". Voici le caractère "TOTO & TATA". Voici le résultat:résultat:

Programmation Bourne shell

1 $ echo TOTO & TATA2 TOTO3 68214 TATA: I nt r ouvabl e5 $ echo TOTO \ & TATA6 TOTO & TATA7 $

Le méta-caractère Le méta-caractère && est est neutralisé par le symbole neutralisé par le symbole \\

Le caractère Le caractère && est est interprété par Bourne interprété par Bourne shell comme une shell comme une demande d’exécution en demande d’exécution en arrière-planarrière-plan

Page 34: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

35

Neutralisation des Neutralisation des caractèrescaractères Donc, le symbole Donc, le symbole \\ permet la neutralisation permet la neutralisation

du caractère qui le suit.du caractère qui le suit. Nous pouvons neutraliser la signification Nous pouvons neutraliser la signification

spéciale du caractère Espace par les spéciale du caractère Espace par les symboles "  " et '  '.symboles "  " et '  '.

Le guillemet: élimine la signification spéciale Le guillemet: élimine la signification spéciale du caractère Espace mais permet la du caractère Espace mais permet la substitution des variables et commandes.substitution des variables et commandes.

L’apostrophe: élimine la signification spéciale L’apostrophe: élimine la signification spéciale du caractère Espace et empêche la du caractère Espace et empêche la substitution des variables et commandes.substitution des variables et commandes.

Programmation Bourne shell

Page 35: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

36

Neutralisation des Neutralisation des caractèrescaractères Voici un exemple qui aide à la Voici un exemple qui aide à la

compréhension de la neutralisation des compréhension de la neutralisation des caractères:caractères:

Pouvez-vous le pourquoi de ces résultats ?Pouvez-vous le pourquoi de ces résultats ?

Programmation Bourne shell

0 $ MACHI NE=̀ host name`1 $ echo La machi ne \ ' $MACHI NE\ ' est en panne2 La machi ne ' cent i ' est en panne3 $ echo La machi ne "' $MACHI NE' " est en panne4 La machi ne ' cent i ' est en panne5 $ echo La machi ne ' $MACHI NE' est en panne6 La machi ne $MACHI NE est en panne7 $ echo "La machi ne ' $MACHI NE' est en panne"8 La machi ne ' cent i ' est en panne9 $ echo ' La machi ne ' $MACHI NE' est en panne'10 La machi ne cent i est en panne11 $

Page 36: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

37

Commandes Commandes exec(1)exec(1) et et trap(1)trap(1) Dans un programme Bourne shell, la Dans un programme Bourne shell, la

commande commande exec(1)exec(1) permet l’exécution permet l’exécution d’une commande sans la création d’une commande sans la création d ’un nouveau processus.d ’un nouveau processus.

Vous pouvez donc passer des Vous pouvez donc passer des paramètres du programme à la paramètres du programme à la commande exécutée.commande exécutée.

Attention, ce n’est pas un appel de Attention, ce n’est pas un appel de sous-routine car Le contrôle n’est pas sous-routine car Le contrôle n’est pas retourné au programme !retourné au programme !

Programmation Bourne shell

Page 37: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

38

Commandes Commandes exec(1)exec(1) et et trap(1)trap(1) Voici un exemple:Voici un exemple:

Voici le résultat de son exécution:Voici le résultat de son exécution:

On voit que la ligne On voit que la ligne echo "Fin du echo "Fin du programme"programme" n’est jamais exécutée! n’est jamais exécutée!

Programmation Bourne shell

1 #! / bi n/ sh2 # Nom du fi chi er exect est3 # exect est : mont rer l ’ eff et de l a commande exec45 pwd # affi cher l e r éper t oi r e courant6 exec dat e # exécut er l a commande dat e( 1) et l ui passer l e cont rôl e7 echo "Fi n du pr ogramme" # j amai s exécut ée à cause de exec dat e

cent i 6> exect est/ expor t / home/ exa/ per sonnel / wong/ CHAPI TRE6di manche, 27 f évr i er 2000, 18: 04: 54 ESTcent i 7>

Page 38: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

39

Commandes Commandes exec(1)exec(1) et et trap(1)trap(1) La commande exec(1) sert aussi à La commande exec(1) sert aussi à

rediriger les entrées et les sorties rediriger les entrées et les sorties standards.standards.

Voir les pages 140 - 142. Ces pages Voir les pages 140 - 142. Ces pages peuvent vous aider à réaliser vos peuvent vous aider à réaliser vos laboratoires !!laboratoires !!

Programmation Bourne shell

Page 39: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

40

Commandes Commandes exec(1)exec(1) et et trap(1)trap(1)

Programmation Bourne shell

La commande La commande trap(1)trap(1) est fort utile est fort utile pour la programmation Bourne shell.pour la programmation Bourne shell.

Sa syntaxe est:Sa syntaxe est:trap 'commandes' signauxtrap 'commandes' signaux

où où commandescommandes est un ensemble de est un ensemble de commandes UNIX (les apostrophes sont commandes UNIX (les apostrophes sont nécessaires pour neutraliser les nécessaires pour neutraliser les caractères spéciaux des commandes)caractères spéciaux des commandes)

où où signauxsignaux sont des numéros (entiers) sont des numéros (entiers)

Page 40: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

41

Commandes Commandes exec(1)exec(1) et et trap(1)trap(1)

Programmation Bourne shell

À la réception d’un signal listé, la À la réception d’un signal listé, la commande commande trap(1)trap(1) exécutera les exécutera les commandes entre apostrophes et termine commandes entre apostrophes et termine le programme Bourne shell.le programme Bourne shell.

Il s’agit donc une forme de communication Il s’agit donc une forme de communication asynchrone entre les programmes (ou asynchrone entre les programmes (ou entre un programme et son terminal).entre un programme et son terminal).

On peut considérer les signaux comme On peut considérer les signaux comme des interruptions logicielles (comparaison des interruptions logicielles (comparaison grossière).grossière).

Page 41: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

42

Commandes Commandes exec(1)exec(1) et et trap(1)trap(1)

Programmation Bourne shell

Voici quelques numéros de signal:Voici quelques numéros de signal:

À noter que le signal 9 est un signal qui À noter que le signal 9 est un signal qui ne peut être intercepté par ne peut être intercepté par trap(1)trap(1). . Saviez-vous la raison ?Saviez-vous la raison ?

Numéro du signal Condition

2 Interruption du terminal par les touches ctrl-c..

3 Quitter par les touches ctrl-| ou ctrl-\ .

9 Tuer. Ce signal ne peut être capturé.

15 Terminaison. Valeur par défaut de la commande ki l l ( 1) .

18 Changement d’état du processus.

Page 42: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

43

Commandes Commandes exec(1)exec(1) et et trap(1)trap(1)

Programmation Bourne shell

Voici un exemple utilisant Voici un exemple utilisant trap(1)trap(1)::

Lancer le programme et appuyer sur les Lancer le programme et appuyer sur les touche ctrl-c.touche ctrl-c.

Le programme se terminera par la Le programme se terminera par la commande commande exitexit et provoque le signal 0. et provoque le signal 0.

La 2e commande La 2e commande trap(1)trap(1) est alors exécutée. est alors exécutée.

1 #! / bi n/ sh2 # Nom du fi chi er t r apt est3 # t r apt est : mont rer l a capt ure des si gnaux45 t r ap ' exi t 1' 1 2 3 15 # capt urer ces si gnaux6 t r ap ' / bi n/ rm / t mp/ * 2> / dev/ nul l ' 0 # exécut er à l a fi n du pr ogramme7 whi l e :8 do9 echo t r apt est en execut i on10 done

Page 43: 1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D., ing. Chapitre 6 Substitution: variables et commandes,

44

Fin du chapitreFin du chapitre

Interpréteur de commande

Le chapitre suivant présentera d’une Le chapitre suivant présentera d’une manière plus approfondie la manière plus approfondie la programmation Bourne shell.programmation Bourne shell.

Également, nous présenterons Également, nous présenterons plusieurs commandes utiles qui plusieurs commandes utiles qui facilitent la programmation Bourne facilitent la programmation Bourne shell.shell.

Fin du chapitre 6Fin du chapitre 6