La commande test
est une commande. À ce titre, test
renvoie donc un statut vrai ou faux. Mais cette commande n'affiche rien à l'écran. Il faut donc, pour connaître le résultat d'un test, vérifier le contenu de la variable $?.
test option "fichier"
Option | Signification |
---|---|
-s | fichier “non vide” |
-f | fichier “ordinaire” |
-d | fichier “répertoire” |
-b | fichier “spécial” mode “bloc” |
-c | fichier “spécial” mode “caractère” |
-p | fichier “tube” |
-L | fichier “lien symbolique” |
-h | fichier “lien symbolique” (identique à « -L ») |
-r | fichier a le droit en lecture |
-w | fichier a le droit en écriture |
-x | fichier a le droit en exécution |
-u | fichier a le “setuid” |
-g | fichier a le “setgid” |
-k | fichier a le “sticky bit” |
-t [n] | fichier n°[n] est associé à un terminal (par défaut, [n] vaut 1) |
Réservé au Ksh / Bash | |
-S | fichier “socket” |
-e | fichier existe quel que soit son type |
-O | fichier m'appartient |
-G | fichier appartient à mon groupe |
-N | fichier modifié depuis sa dernière lecture |
test "fichier1" option "fichier2"
Option | Signification |
---|---|
-z | chaîne de longueur nulle |
-n | chaîne de longueur non nulle |
= | chaîne1 identique à chaîne2 |
!= | chaîne1 différente de chaîne2 |
Exemples :
$ var="1A" $ [[ $var =~ ^[0-9]*$ ]] #renvoie faux $ [[ $var =~ ^[0-9] ]] #renvoie vrai $ [[ $var =~ [A-Z]{1} ]] #renvoie vrai $ [[ $var =~ ^[0-1]{1}[A-Z]{1}$ ]] #renvoie vrai
test nb1 option nb2
Option | Signification |
---|---|
-eq | nb1 égal à nb2 (equal) |
-ne | nb1 différent de nb2 (non equal) |
-lt | nb1 inférieur à nb2 (less than) |
-le | nb1 inférieur ou égal à nb2 (less or equal) |
-gt | nb1 supérieur à nb2 (greater than) |
-ge | nb1 supérieur ou égal à nb2 (greater or equal) |
Exemples :
$ test "5" = "05" #Renvoie "faux" (ce qui est mathématiquement incorrect) $ test "5" -eq "05" #Renvoie "vrai" (correct)
Les connecteurs permettent de composer des expressions plus complexes.
Option | Signification |
---|---|
-a | “ET” logique |
-o | “OU” logique |
! | “NOT” logique |
(…) | Groupement d'expressions (doit être protégé de backslashes pour ne pas que le shell l'interprète comme une demande de création de sous-shell) |
Exemple : Vérifie si l'année courante est bissextile (divisible par 4, mais pas par 100 ; ou divisible par 400)
$ y=`date '+%Y'` # Récupère l'année courante dans la variable "y" $ test \( `expr $y % 4` -eq 0 ?a `expr $y % 100` -ne 0 \) ?o `expr $y % 400` -eq 0
Les commandes true
et false
n'ont d'autre but que de renvoyer un état respectivement à “vrai” ou “faux”.
Exemples :
$ true # La commande renvoie la valeur "vrai" $ echo $? 0 $ false # La commande renvoie la valeur "faux" $ echo $? 1