Vous êtes sur la page 1sur 13

Cours

dUNIX &C

Programmation structur

Chapitre 5

PROGRAMMATION STRUCTUREE DANS LE SHELL


Objectifs:
Etudier les oprations de tests dans le shell dUNIX. Etudier les structures de contrle dans le shell dUNIX. Etudier les structures de rptition dans le shell dUNIX.

Prrequis:
Les chapitres prcdents de ce cours dUNIX.

Plan
I/TRANSMISSION DE PARAMETRES: II/GESTION DES SIGNAUX ET PROCESSUS: III/LES TESTS DANS LE SHELL DUNIX: III-1/ Tests sur les caractristiques des fichiers. III-2/ Tests de comparaison de fichiers. III-3/ Tests sur les valeurs numriques. III-4/ Tests sur les chanes de caractres. IV/ LES CONDITIONS COMPOSEES: V/ LES STRUCTURES CONDITIONNELLES: V-1/ La structure if-then-else-fi. V-2/ La structure case-in-esac. VI/ LES BOUCLES: VI-1/ La construction for-in-do-done. VI-2/ La construction while-do-done. VI-3/ La construction until-do-done. VI-4/ Sortie dune boucle. (Break) VI-5/ Saut vers la fin dune boucle.(continue) VI-6/ La rcursivit.

TAYARI Lassaad

Page 46

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

Chapitre 5

PROGRAMMATION STRUCTUREE DANS LE SHELL


I/TRANSMISSION DE PARAMETRES: Une commande SHELL peut travailler avec des arguments qui lui sont transmis lors de son appel via la ligne de commande:

$commande param1 param2 ....... paramN


Les paramtres de la commande sont rfrencs par/ $0 $1 $2 $N $# $* $$ Nom de la commande Premier paramtre Deuxime paramtre N
ime

paramtre

Nombre de paramtres Tous les paramtres PID de processus

II/GESTION DES SIGNAUX ET PROCESSUS: Durant l excution dun processus, certains signaux concernant ce processus peuvent apparatre: Signal 0 Signal 1 Signal 2 Signal 3 Signal 9 Signal 15 Sortie du SHELL Dconnexion de terminal Interruption Quit Meurtre du processus Fin normal du processus

A laide de la commande trap, lutilisateur peut programmer excution dun traitement spcifique lorsque survient un signal. La syntaxe de la commande trap est: $trap `commande(s)` signal
TAYARI Lassaad Page 47 ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

Exemple:
e Programmation de linterruption lmission de ^T par lutilisateur/ $stty intr ^T e Programmation dun programme utilisateur dun trap qui tue le processus en cours suit lmission dune interruption. $trap `kill -9 $$` 2 e Arrter le processus en cours excuter les deux commandes suivantes. $ trap `ls -l ; date ` 2 e Inhibition de linterruption: $trap `` 2

III/LES TESTS DANS LE SHELL DUNIX: A la fin de l'excution dune commande, un code de sortie (dnot par ?) est positionn. Si la commande sest bien excute (vrai), le code prend la valeur 0 (zro), sinon (faux), il est diffrent de 0 (zro).

Exemple:
$ls -l $echo $? 0 $ls -k $echo $? 2 (excution errone) (excution OK) (commande fausse) (commande juste)

UNIX propose une procdure de TEST pour programmer une condition. Quatre types de test sont disponibles: tests sur les caractristiques des fichiers tests de comparaison de fichiers tests sur les valeurs numriques tests sur les chanes de caractres alphanumriques.

TAYARI Lassaad

Page 48

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

III-1/ Tests sur les caractristiques des fichiers. La syntaxe de base est: $test -option fichier Les diffrentes possibilits sont: test test test test test test test test -f -d -r -w -x -c -b -s fichier : Vrai si fichier ordinaire fichier : Vrai si fichier rpertoire fichier : Vrai si fichier est accessible en lecture fichier : Vrai si fichier est accessible en criture. fichier : Vrai si fichier est excutable. fichier : Vrai si fichier spcial (mode caractre) fichier : Vrai si fichier spcial (mode bloc) fichier : Vrai si fichier non nul o [ -option fichier ]

Exemple:
$test -r fichier $echo $? 0 III-2/ Tests de comparaison de fichiers. La syntaxe est: test fichier1 oprateur fichier2 trois possibilits existent: test test test fichier1 fichier1 fichier1 -ef -nt -ot fichier2 fichier2 fichier2 : Vrai si les deux fichiers sont lis : Vrai si fichier1 est plus rcent : Vrai si fichier2 est plus rcent o [ fichier1 oprateur fichier2 ] o [ -r fichier ]

Attention ses trois tests ne sont pas disponibles sur toutes les versions d'UNIX. III-3/ Tests sur les valeurs numriques. La syntaxe est : test valeur1 oprateur valeur2 Les diffrentes possibilits sont: test test test test test test val1 val1 val1 val1 val1 val1 -eq -ne -gt -ge -lt -le val2 val2 val2 val2 val2 val2 :Vrai si val1=val2 :Vrai si val1val2 :Vrai si val1>val2 :Vrai si val1val2 :Vrai si val1<val2 :Vrai si val1val2
Page 49 ISET DE SFAX ~ A.U 97/98

[ valeur1

oprateur valeur2 ]

TAYARI Lassaad

Cours

dUNIX &C

Programmation structur

III-4/ Tests sur les chanes de caractres. Deux types de syntaxes sont possibles: test o test option "chaine1" " chane " oprateur "chaine2"

Les oprateurs possibles sont: test test test test test -z -n "ch1" "ch1" : Vrai si la longueur de ch1 est nulle : Vrai la longueur dde ch1 est non nulle "ch2" : Vrai si ch1 et ch2 sont identiques "ch2" : Vrai si ch1 et ch2 sont diffrentes : Vrai si ch1 est non nulle.

"ch1" = "ch1" != "ch1"

Exemples:
$a="ch1" $b="ch2" $test "$a" = "$b"

$echo $? 1 $test "$a" != "$b"

$echo $? 0

IV/ LES CONDITIONS COMPOSEES: Les oprateurs suivants peuvent tres utiliss pour former des conditions composes: ! -a -o : La ngation : : Le ET binaire Le OU binaire \(condition\)

La condition compose doit tre reprsente de la manire suivante:

Exemples:
test ! -r fichier [ ! -r fichier ] est vrai si fichier n'est pas autoris en lecture test \( -w fichier1 -a ! -x fichier2 \) vrai si fichier1 est autoris en criture et fichier2 n'est pas excutable.

TAYARI Lassaad

Page 50

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

V/ LES STRUCTURES CONDITIONNELLES: Le SHELL est un langage de programmation. En effet, il supporte les variables, les structures conditionnelles et les boucles: V-1/ La structure if-then-else-fi. Le schma de base de cette structure est le suivant: if liste_de_commandes then liste_de_commandes else liste_de_commandes fi si l'excution de la premire liste de commandes s'est bien droule, alors la deuxime liste sera excute, sinon la troisime sera excute.

Remarques: La partie else est facultative Si les commandes de if sont spares par ";", c'est la dernire commande qui sera teste. Si les commandes de if sont spares par &&, alors elles sont toutes testes.

Exemple: if commande1 && commande2 then liste_de_commandes else liste_de_commandes fi


Si les commandes de if sont spares par l'oprateur "||", il suffirait que l'une d'elles soit vraie pour passer l'excution des commandes de then.

Exemple: if commande1

|| commande2

then liste_de_commandes else liste_de_commandes fi

TAYARI Lassaad

Page 51

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

Il est possible d'imbriquer des structures conditionnelles. La syntaxe est: if liste_de_commandes then liste_de_commandes else if liste_de_commandes then liste_de_commandes else liste_de_commandes fi fi ou encore: if liste_de_commandes then liste_de_commandes

elif

liste_de_commandes then liste_de_commandes else liste_de_commandes

fi

Exemple:
$cat >filetest if test -x $1 then echo "fichier $1 existe et est excutable" else echo "fichier $1 n'existe pas ou n'est pas excutable" fi

Ce programme sert identifier les fichiers excutables. If test ! -s $1 then echo "fichier $1 n'existe pas" else if test -x $1

then echo "fichier $1 existe et est excutable" else echo "fichier $1 existe mais n'est pas excutable" fi fi

TAYARI Lassaad

Page 52

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

V-2/ La structure case-in-esac. La structure case-in-esac permet d'effectuer un traitement spcifique selon la valeur de la variable test. La syntaxe est : case $variable in chaine1) chaine2) . . chaineN) esac La commande case compare la variable aux chanes spcifies et excute les commandes relatives au chanes qui correspondent. commandes;; commandes;; commandes;;

Exemple:
e choix d'un couleur parmi plusieurs: echo "choisir une lettre parmi R B N J" read choix case $choix in "R") "B") "N") "J") esac VI/ LES BOUCLES: VI-1/ La construction for-in-do-done. Cette construction permet de rpter le mme traitement pour des valeurs diffrents d'une variable. Il y a autant de boucles que de valeurs. La syntaxe est : for variable do commande1 commande2 . commandeN done
TAYARI Lassaad Page 53 ISET DE SFAX ~ A.U 97/98

echo "ROUGE";; echo "BLEU";; echo "NOIR";; echo "JAUNE";;

in

val1 val2 val3 ...... valN

Cours

dUNIX &C

Programmation structur

Les valeurs que peut prendre la variable peuvent tre des paramtres, exemple $1, $2,...., ou le paramtre global $*.

Exemples:
e test sur la permission en excution pour 3 fichiers. $Cat >exec for fichier in fichier1 fichier2 fichier3 do [ -x $fichier ] echo $? done e Ce test peut tre paramtr pour agir sur un nombre illimit de fichiers.

TAYARI Lassaad

Page 54

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C for fichier in $* do [ -x $fichier ] echo $? done for fichier do [ -x $fichier ] echo $? done

Programmation structur

VI-2/ La construction while-do-done. Cette boucle excute une suite de commandes tant qu'une condition est vrai. La syntaxe est: while condition do commande1 commande2 . . commandeN done

Donc tant que la condition est vraie, excuter les commandes. La condition peut tre simple ou compose. Exemples: e Programmation d'un compteur: $cat compteur compteur=1 while test $compteur -le 20 do echo $compteur compteur=` expr $compteur + 1 ` done
TAYARI Lassaad Page 55 ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

e Affichage des utilisateurs toutes les minutes: $cat >qui while true do who sleep 60 done ^d $sh qui& ( o while : )

VI-3/ La construction until-do-done. Cette construction permet de rpter une squence de commandes jusqu' ce que la condition soit vrai, c'est dire quelle fonctionne a l'inverse de la boucle while-do-done. Sa syntaxe est: until condition do commande1 commande2 . . commandeN done Donc, cette construction permet d'excuter les commandes tant que la condition n'est pas satisfaite (condition fausse). La condition est teste la premire. Exemples: e Programmation d'un compteur: $cat compteur compteur=1 until test $compteur -gt 20 do echo $compteur compteur=` expr $compteur + 1 ` done

TAYARI Lassaad

Page 56

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C

Programmation structur

VI-4/ Sortie dune boucle. (Break) L'utilisation de l'expression while true ou while : permet de conduire a une boucle infinie. Pour quitter cette boucle, on peut utiliser la commande break[n] o n est le nombre de niveaux de boucles imbriques sauter (1 par dfaut) Exemple: e Somme des notes d'un tudiant: $cat>somme compteur=1 somme=0 while true do echo "entrez la $compteur ime note :" read note if test $note -eq 999 then

break
else compteur= ` expr $compteur +1 ` somme=` expr $somme + $note ` fi done echo "La somme est $somme"

VI-5/ Saut vers la fin dune boucle.(continue) Contrairement la commande break, la commande continuee permet de sauter vers la fin d'une boucle sans la quitter forcement. Exemple: e Dplacement des fichiers excutables sur un nouveau rpertoire "binaire". $Cat > copie mkdir binaire for fichier do if test -x $fichier then

TAYARI Lassaad

Page 57

ISET DE SFAX ~ A.U 97/98

Cours

dUNIX &C cp $fichier binaire/$fichier

Programmation structur

echo " fichier $fichier sur binaire " else

continuee
fi done ^d $sh copie * VI-6/ La rcursivit. Une procdure est dite rcursive si elle fait appel elle-mme. Le paramtre $0 qui indique le nom de la procdure est trs souvent utilis. Exemple: e Affichage de tous les sous-reprtoires de l'utilisateur: $cat > repliste if [ -d $1 ]

then echo "$1 est un rpertoire" for j in $1/* do

$0 $j
done fi ^d

TAYARI Lassaad

Page 58

ISET DE SFAX ~ A.U 97/98

Vous aimerez peut-être aussi