13.07.2013 Views

Configuration, mise en oeuvre et administration de serveurs Internet ...

Configuration, mise en oeuvre et administration de serveurs Internet ...

Configuration, mise en oeuvre et administration de serveurs Internet ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Le second test est FAUX(1)<br />

$ _<br />

On peut donc conclure que l'instruction if ... th<strong>en</strong> ... else ... fi, fonctionne <strong>de</strong> la manière suivante : si (if <strong>en</strong> anglais) le<br />

test est VRAI(0) alors (th<strong>en</strong> <strong>en</strong> anglais) le bloque d'instructions comprises <strong>en</strong>tre le th<strong>en</strong> <strong>et</strong> le else (ou le fi <strong>en</strong><br />

l'abs<strong>en</strong>ce <strong>de</strong> else) est éxécuté, sinon (else <strong>en</strong> anglais) le test est FAUX(différ<strong>en</strong>t <strong>de</strong> 0)) <strong>et</strong> on éxécute le bloque<br />

d'instructions comprises <strong>en</strong>tre le else <strong>et</strong> le fi si ce bloque existe.<br />

Bon, évi<strong>de</strong>mm<strong>en</strong>t, <strong>de</strong>s tests <strong>de</strong> c<strong>et</strong> ordre ne paraiss<strong>en</strong>t pas très utiles. Voyons <strong>de</strong> vrais tests maint<strong>en</strong>ant.<br />

Les tests<br />

Un test, nous l'avons vu, n'est ri<strong>en</strong> <strong>de</strong> plus qu'une comman<strong>de</strong> standard. Une <strong>de</strong>s comman<strong>de</strong>s standard est 'test', sa<br />

syntaxe est un peu complexe, je vais la décrire avec <strong>de</strong>s exemples.<br />

• si l'on veut tester l'existance d'un répertoire , on tapera : test −d<br />

• si l'on veut tester l"existance d'un fichier , on tapera : test −f<br />

• si l'on veut tester l'existan<strong>de</strong> d'un fichier ou répertoire , on tapera : test −e<br />

Pour plus d'information faites : man test.<br />

On peut aussi combiner <strong>de</strong>ux tests par <strong>de</strong>s opérations logiques : ou correspond à −o, <strong>et</strong> correspond à −a (à nouveau<br />

allez voir la man page), exemple : test −x /bin/sh −a −d /<strong>et</strong>c C<strong>et</strong>te instruction teste l'existance <strong>de</strong><br />

l'éxécutable /bin/sh (−x /bin/sh) <strong>et</strong> (−a) la prés<strong>en</strong>ce d'un répertoire /<strong>et</strong>c (−d /<strong>et</strong>c).<br />

On peut remplacer la comman<strong>de</strong> test par [ ] qui est plus lisible, exemple :<br />

if [ −x /bin/sh ] ; th<strong>en</strong><br />

echo /bin/sh est executable. C\'est bi<strong>en</strong>.<br />

else<br />

echo /bin/sh n\'est pas executable.<br />

echo Votre système n\'est pas normal.<br />

fi<br />

Mais il n'y a pas que la comman<strong>de</strong> test qui peut être employée. Par exemple, la comman<strong>de</strong> grep r<strong>en</strong>voie 0 quand la<br />

recherche a réussi <strong>et</strong> 1 quand la recherche a échoué, exemple :<br />

if grep −E "^fre<strong>de</strong>ric:" /<strong>et</strong>c/passwd > /<strong>de</strong>v/null ; th<strong>en</strong><br />

echo L\'utilisateur fre<strong>de</strong>ric existe.<br />

else<br />

echo L'utilisateur fre<strong>de</strong>ric n\'existe pas.<br />

fi<br />

C<strong>et</strong>te série d'instruction teste la prés<strong>en</strong>ce <strong>de</strong> l'utilisateur fre<strong>de</strong>ric dans le fichier /<strong>et</strong>c/passwd. Vous remarquerez que<br />

l'on a fait suivre la comman<strong>de</strong> grep d'une redirection vers /<strong>de</strong>v/null pour que le résutat <strong>de</strong> c<strong>et</strong>te comman<strong>de</strong> ne soit<br />

pas affichée : c'est une utilisation classique. Ceci explique aussi l'expression : "Ils sont tellem<strong>en</strong>t intéressant tes<br />

mails que je les <strong>en</strong>voie à /<strong>de</strong>v/null" ;−).<br />

Faire quelque chose <strong>de</strong> différ<strong>en</strong>t suivant la valeur d'une variable<br />

Faire la même chose pour tous les élém<strong>en</strong>ts d'une liste Lorsque l'on programme, on est souvant amm<strong>en</strong>é à faire la<br />

même pour divers élém<strong>en</strong>ts d'une liste. Dans un shell script, il est bi<strong>en</strong> évi<strong>de</strong>mm<strong>en</strong>t possible <strong>de</strong> ne pas réécrire dix<br />

fois la même chose. On dira que l'on fait une boucle. L'instruction qui réalise une boucle est<br />

32 sur 89 32

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!