Les commandes if,
while, et
until testent
le statut de la commande qu'ils ont en paramètre.
if
Syntaxe
if commande
then
liste_commandes
[elif commande
then
liste_commandes] ...
[else liste_commandes]
fi
Exemples
if test -f $1
then
cat $1
else
echo "Le fichier \"$1\" n'existe pas"
fi
test
test est une commande qui renvoie une valeur vraie
ou fausse (0 ou 1). Elle a différentes options permettant de
tester différentes conditions sur des fichiers, des valeurs
(chaînes de caractères), etc.
Sa syntaxe est test expr ou [ expr ]
(attention, il faut un espace après [ et avant
]).
| expr | signification |
|---|---|
| -r fichier | vrai si le fichier existe et est accessible en lecture (r) |
| -w fichier | vrai si le fichier existe et est accessible en écriture (w) |
| -x fichier | vrai si le fichier existe et est exécutable (x) |
| -f fichier | vrai si le fichier existe et est un fichier "régulier" (file) |
| -d fichier | vrai si le "fichier" existe et est un répertoire (directory) |
| -s fichier | vrai si le fichier existe et a une taille non nulle (size) |
| c1 = c2 | vrai si les deux expressions sont égales (des chaînes, en sh) |
| c1 != c2 | vrai si les deux expressions sont différentes (des chaînes, en sh) |
| c1 | vrai si c1 n'est pas la chaîne nulle (vide) |
| e1 -eq e2 | vrai si les deux entiers e1 et e2 sont algébriquement égaux (equal) |
| e1 -ne e2 | vrai si les deux entiers e1 et e2 sont algébriquement différents (not equal) |
| e1 -gt e2 | vrai si l'entier e1 est plus grand que l'entier e2 (greater than) |
| e1 -lt e2 | vrai si l'entier e1 est plus petit que e2 (lower than) |
| ! expr | négation de l'expression booléenne expr |
| expr1 -a expr2 | et logique entre les deux expressions booléennes expr1 et expr2 (and) |
| expr1 -o expr2 | ou logique entre les deux expressions booléennes expr1 et expr2 (or) |
Exemples
Quand script.sh est un fichier qui existe dans le
répertoire courant.
>test -f script.sh >echo $? 0
Quand inexistant.sh est un fichier qui n'est pas
dans le répertoire courant.
>test -f inexistant.sh >echo $? 1