Les tests, comme leur dénomination l'indique, permettent de faire un certain nombre de tests, donc de contrôles et d'agir en conséquence.

Syntaxe

Il y a deux syntaxes possibles :

Cette commande ne retourne pas de résultat sur la sortie standard, elle renvoie le code retour 0 si expression logique est vraie, 1 si elle est fausse.

Expressions logiques

Tests sur les fichiers

testtest réalisé
-f fichiervrai si fichier est un fichier ordinaire
-d fichiervrai si fichier est un répertoire
-h fichiervrai si fichier est un lien symbolique
-c fichiervrai si fichier est un périphérique caractère
-b fichiervrai si fichier est un périphérique bloc
-p fichiervrai si fichier est un tube nommé (FIFO)
-S fichiervrai si fichier est une socket
-e fichiervrai si fichier existe
-r fichiervrai si fichier peut être lu
-w fichiervrai si fichier peut être modifié
-x fichiervrai si fichier peut être exécuté
-s fichiervrai si fichier existe et n'est pas vide
fichier1 -nt fichier2vrai si fichier1 est plus récent que fichier2
fichier1 -ot fichier2vrai si fichier1 est plus ancien que fichier2

Tests sur les droits spéciaux

testtest réalisé
-u fichiervrai si fichier possède le droit SUID
-g fichiervrai si fichier possède le droit GUID
-k fichiervrai si fichier possède le "sticky bit"

Tests sur les chaînes de caractères

testtest réalisé
-z chaînevrai si chaîne est de longueur 0 (chaîne non définie)
-n chaînevrai si chaîne est de longueur supérieure à 0
chaîne1 = chaîne2vrai si chaîne1 est identique à chaîne2
chaîne1 != chaîne2vrai si chaîne1 est différente de chaîne2

Astuce

Certains caractères comme "-" peuvent provoquer des erreurs ou poser des problème lors des tests. Pour éviter cela, par exemple dans le cas des chaînes vides, on réalise le test en ajoutant un acaractère anodin ( "x", ou autre ):

I=-d
if [ "x${I}" ="x" ]; then echo I est vide; fi
if [ "x${I}" ="x-d" ]; then traitement; fi

Tests sur les nombres

testtest réalisé
num1 -eq num2vrai si num1 est égal à num2
num1 -ne num2vrai si num1 n'est pas égal à num2
num1 -lt num2vrai si num1 est inférieur à num2
num1 -le num2vrai si num1 est inférieur ou égal à num2
num1 -gt num2vrai si num1 est supérieur à num2
num1 -ge num2vrai si num1 est supérieur ou égal à num2

Opérateurs logiques

testtest réalisé
! expression logiquevrai si expression logique est fausse
expression logique1 -a expression logique2vrai si les deux expressions sont vraies
expression logique1 -o expression logique2vrai si l'une des deux expressions est vraie