Newer
Older
cours-unix-shell / src / shell / conditions.md

Conditions - Shell - UNIX

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 pour vrai, 1 pour fausse).
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
e1 -a e2 et logique entre les deux expressions booléennes e1 et e2 (and)
e1 -o e2 ou logique entre les deux expressions booléennes e1 et e2 (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