Vous êtes sur la page 1sur 29

Programmation du Shell : structures de contrle

Programmation du Shell : structures de contrle


Charles Consel ENSEIRB
Septembre/Octobre 2001

1 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Structures de contrle
Contrle du droulement de l'excution du programme (control flow) x Excution de certaines parties du programme x Rptition, sous certains conditions, de l'excution de certaines parties du programme x if, for, while,
2 Systme d'exploitation (1)
ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Les conditionnelles
if Condition then SeqInst [elif Condition then SeqInst ] [else SeqInst ] fi
Conditions
Variables Shell Caractristiques de fichiers Rsultat d'une commande etc.
vrai

Condition

faux

SeqInst
vrai vrai

vrai

Condition

faux

Condition

faux

Condition

faux

SeqInst SeqInst SeqInst SeqInst

3 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Statut de retour et de sortie


x x

Condition = liste d'instructions


(Pas une expression boolenne comme autres langages)

Vrification de condition = statut de sortie de la commande x Toute commande Unix = code de retour
(fonction Shell, script, code C ou autre langage) x

Code/valeur de retour ou statut de fin


Nombre entier
Valeur 0 succs/excution correcte Autre valeur (entre 1 et 255) chec/erreur
4
Charles Consel

Systme d'exploitation (1)

ENSEIRB

sept./oct. 2001

Programmation du Shell : structures de contrle

Forme symbolique et exemple


si (if) la commande s'est excute correctement alors (then) traitement normal sinon (else) gestion de l'erreur finsi (fi) mycd() if cd then echo else echo fi } { $1 "Rpertoire courant: $1" "Rpertoire erron: $1"

5 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Gestion de la valeur de sortie : accs


Variable spciale ? (valeur $?) x Exemple
x

cd mauvais_repertoire echo $?
x

Quelle est la valeur de retour de mycd ?

6 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Gestion de la valeur de sortie : cration


x

Instruction return
Utilisation : fonction (ou script avec source) Effet : termine la fonction Options :
Argument = valeur de retour Sans argument = valeur par dfaut (statut dernire commande)

Instruction exit
Utilisation : fonction ou script Effet : termine le script Options : (identique return)

7
Charles Consel

Systme d'exploitation (1)

ENSEIRB

sept./oct. 2001

Programmation du Shell : structures de contrle

Combinaison de valeurs de sortie


if Instr1 && Instr2 then SeqInst fi if Instr1 || Instr2 then SeqInst fi

vrai

Instr1

faux vrai

Instr1

faux

vrai

Instr2

faux vrai

Instr2

faux

SeqInst

SeqInst

8 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Ngation de la valeur de sortie

if ! Instr then SeqInst fi

9 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Exemples de combinaisons
fichier=$1 mot1=$2 mot2=$3 && if grep $mot1 $fichier grep $mot2 $fichier || then echo "$mot1 et $mot2 dans $fichier" ou fi

10 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Tests conditionnels
x

Autres conditions
Comparaisons de chanes de caractres Tests d'attributs de fichiers Comparaisons de nombres entiers

x x

Syntaxe :
[ condition ]

Combinaison :
if [ cond1 ] && [ cond2 ] then ... fi

x x

Valeur de sortie : condition vraie ou fausse Commande [ commande test


11
ENSEIRB

Systme d'exploitation (1)

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Comparaisons de chanes de caractres


Oprateur chane1 = chane2 chane1 != chane2 -n chane1 -z chane1 Vrai si chane1 et chane2 identiques chane1 et chane2 diffrentes chane1 non nulle chane1 nulle

if [ -z $1 ] then echo ma_cde: argument inexistant fi

12 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Tests d'attributs de fichiers


Oprateur -d fichier -e fichier -f fichier -r fichier -s fichier -w fichier -x fichier -O fichier -G fichier fichier1 nt fichier2 fichier1 ot fichier2 Vrai si fichier existe et est un rpertoire fichier existe fichier existe et est ordinaire permission de lire existe et nest pas vide permission dcrire permission dexcuter propritaire du fichier groupe propritaire du fichier fichier1 plus rcent fichier2 fichier1 plus ancien fichier2

13 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Problmes
x

Modifications de
popd : cas de la pile vide. pushd : cas du rpertoire destination erron.

Ecriture d'une version verbeuse de la commande ls. Par dfaut, liste toutes les informations sur un fichier. Fonction du nom de lsv

14 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Comparaisons de nombres entiers


Oprateur -lt -le -eq -ge -gt -ne Comparaison infrieur infrieur ou gal gal suprieur ou gal suprieur diffrent de

15 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

La boucle for
Rpter le mme code pour plusieurs valeurs x Liste fixe de valeurs pour la boucle x Chaque itration prend une valeur x Syntaxe :
x

for nom [in liste] do instructions avec $nom done


16 Systme d'exploitation (1)
ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

La liste de valeurs du for


x

liste = liste de noms

Si absence de in liste , par dfaut "$@" for arg in "$@" do echo $arg done
x

17 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Problme
x

Ecrire un programme Shell, nomm lf, qui reoit en argument un rpertoire et qui n'affiche que les fichiers prsents dans le rpertoire.

18 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Problmes
Vrifier que les chemins de la variable PATH sont valides (utilisation de la variable IFS) x Dfinir la fonction mls qui prend un nombre variable de noms de fichiers dont il faut lister les informations (fonction msv). (ex. mls *)
x

19 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Problme
x

Ecrire une fonction qui effectue un affichage format d'une arborescence


progs proj1 f.c docs man1 command.txt

Informations

echo -e "\t" truc Script tracerep


fichier=$1 echo $fichier if [ -d $fichier ]; then cd $fichier tracerep $(ls) cd .. fi exit
20 Systme d'exploitation (1)
ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

La condition case
x

Syntaxe :
case expr in mod1 ) seqInst1 ;; mod2 ) seqInst2 ;; ... esac

x x x

Action (seqInst) peut tre vide Cas par dfaut : modle * Combinaison de modles : mod1 | mod2
21
ENSEIRB

Systme d'exploitation (1)

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Exemple de la condition case


for fichier in * do case $fichier in *.c ) echo "$fichier: Source C";; *.p ) echo "$fichier: Source Pascal";; *.* ) echo "$fichier: type inconnu" echo "Ajouter le cas ${fichier##*.}";; * ) ;; esac done
22 Systme d'exploitation (1)
ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

La construction select
x

Syntaxe :
select nom [in liste] do seqInst avec $nom done

Effet :
Gnration d'un menu avec numros Demande de saisie d'un numro Enregistrement du choix dans nom Excution des instructions seqInst Rptition l'infini
23
ENSEIRB

Systme d'exploitation (1)

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Exemple de la construction select


PS3=votre choix ? select rep in albert rene luc do if [ -z $rep ] then echo Choix non valide else break fi done
24 Systme d'exploitation (1)
ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Les boucles while et until


x

Excution d'une squence d'instructions


tant que (while) jusqu' ce que (until)

condition vrifie x Applications


Arithmtique entire Entre/sortie de variables Traitement de la ligne de commande
25 Systme d'exploitation (1)
ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Syntaxe des boucles while et until


while condition do seqInst done until commande do seqInst done
26 Systme d'exploitation (1)
ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Exemple de boucle while


path=$PATH: while [ $path ] do ls -ld ${path%%:*} path=${path#*:} done

27 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Exemple de boucle until


until cp $1 $2 do echo Attente sleep 5 done

28 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel

Programmation du Shell : structures de contrle

Problme
x

Ecrire une version modifie de cd qui permet de tester chaque rpertoire inclus dans le chemin cible.

$ vcd /usr/locol/bin vcd: locol: no such directory

29 Systme d'exploitation (1)


ENSEIRB

sept./oct. 2001

Charles Consel