Vous êtes sur la page 1sur 17

Chapitre 3

Système d’Exploitation
UNIX
Programmation Shell:
Tests, Conditions et Boucles

A.ROUDANE
Les types de Tests

Il est possible d’effectuer trois types de tests différents en Shell:


 Des tests sur des chaînes de caractères.
 Des tests sur des nombres.
 Des tests sur des fichiers.

test expression ou [ expression ]


Permet d’évaluer une expression.
• Si vrai, renvoie 0, sinon, renvoie 1.
• S’il n’y a pas d’expression, renvoie 1 (false).

 test expression est équivalent à [ expression ]


Liste des opérateurs de Tests

test expression ou [ expression ]


-z  test si la chaîne est vide
-n  test si la chaîne est non vide
ch1 = ch2  vrai si les deux chaînes sont identiques
ch1 != ch2  vrai si les deux chaînes sont différentes

-d file  vrai si le fichier existe et est un répertoire


-f file  vrai si le fichier existe et est un fichier « ordinaire»
-h file  vrai si le fichier existe et est un lien symbolique
-x file  vrai si le fichier existe et est autorisé en exécution
-w file  vrai si le fichier existe et est autorisé en écriture
-r file  vrai si le fichier existe et est autorisé en lecture
Liste des opérateurs de Tests

test expression ou [ expression ]


n1 -eq n2  si les deux nombres sont numériquement égaux
n1 -ne n2  si les deux nombres sont numériquement inégaux
n1 -lt n2  si n1 est numériquement inférieur à n2 (<)
n1 -gt n2  si n1 est numériquement supérieur à n2 (>)
n1 –le n2  si n1 est numériquement inférieur ou égal à n2 (<=)
n1 -ge n2  si n1 est numériquement supérieur ou égal àn2 (>=)

! exp1  vrai si l’expression est fausse (et vice-versa)


exp1 -a exp2  vrai si les deux expressions sont vraies (AND)
exp1 -o exp2  vrai si au moins une expression est vraie (OR)
Liste des opérateurs de Tests

Exemples:
Branchement conditionnel :
if-then-elif-else-fi

if liste-commandes-1
then liste-commandes-2
elif liste-commandes-3 <−−− autant de fois que nécessaire
else liste-commandes-4 <−−− si nécessaire
fi
#!/bin/sh
if commande [options] arguments > resultats.txt 2> erreurs.txt
then
# code de retour (exit) valant 0  La condition (booléenne) est en général le
bloc-1-de-commandes-unix code de retour d’une commande UNIX.
else  Le code de retour de la commande
# code de retour (exit) différent de 0 détermine le test « if » :
bloc-2-de-commandes-unix •Code de retour valant zéro : Le test
fi «if» est vrai.
•Code de retour non nul : Le test «if»
est faux
Branchement conditionnel :
if-then-elif-else-fi

Exemples:
Plusieurs tests à la fois

Les deux symboles à connaître sont:


&&: signifie «ET»;
||: signifie «OU».
Exemple: If [ cond1 ] && [ cond2 ]
Branchement conditionnel :
case-esac

case expression in
motif1 )
liste-commandes ;;  autant de fois
...
*)
liste-commandes ;;
esac

Exécute la liste-commandes suivant le motif reconnu.


Le motif à reconnaitre peut s’exprimer sous forme d’expression
rationnelle utilisant les méta-caractères : * ? [ ] -
Branchement conditionnel :
case-esac

Exemple:
Boucle for-do-done

for variable in liste_de_mots


do
liste-commandes
done

La variable prend successivement les valeurs de la liste de mots, et pour


chaque valeur, liste-commandes est exécutée.

$ cat test_for1 $ ./test_for1


For i in un deux trois quatre chapitre un
do chapitre deux
echo "chapitre $i" chapitre trois
done chapitre quatre
Boucle: For-do-done

Exemple:
Boucle while-do-done

while liste-commandes-1
do
liste-commandes-2
done
La valeur testée par la commande while est l’état de sortie de la
dernière commande de liste-commandes-1.
Si l’état de sortie est 0, alors le Shell exécute liste-commandes-2 puis
recommence la boucle.

$ cat test_while1
while [ "$1" ] $ ./test_while1 un "deux trois" quatre
do un
echo $1 deux trois
shift quatre
done
Boucle: while-do-done

Exemple:
Contrôle du flux d’exécution :
break, continue

break ou break n
permet de sortir d’une boucle for ou while.
Si n est précisé, il indique le nombre d’imbrication concernée par le
break.

continue n
permet de passer à l’itération suivante d’une boucle for ou while.
Si n est précisé, il indique le nombre d’imbrication concernée par le
continue.
Contrôle du flux d’exécution :
break, continue

Exemple:
Exercices

1) Ecrire un script qui lit un entier à partir du clavier puis affiche son
signe (négatif, positif ou nul)

2) Ecrire un script qui demande à l’utilisateur de saisir un mot de


passe. Tant que l’utilisateur ne saisi pas le mot de passe «Linux»
le script affiche le message: « Mauvais mot de passe! Vous avez
que 3 autres chances!».
Le nombre d’essais est inférieur à 4, et le script doit redemandé à
l’utilisateur de re-saisir le bon mot de passe.

3) Écrire un script qui compte le nombre de fichiers et de répertoires


dans le répertoire courant et affiche le résultat sous forme :
Fichiers : 12
Répertoires : 9

Vous aimerez peut-être aussi