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