La commande test de bash

test permet de évaluer/vérifier une condition sur un fichier, des valeurs numériques et sur des chaînes de caractères en retournant un code de sortie 0(vraie) ou 1(faux). 

Syntaxe de base

test EXPRESSION
test
[ EXPRESSION ] # forme alternative de test EXPRESSION
[ ]
[ OPTION

Toujours utiliser des guillemets autour des variables, par exemple [ -z "$var"], afin d’éviter les erreurs si vide.
Toujours mettre des espaces dans les [ ], mais aussi entre les arguments et tests, car par défaut l’option est -n dans la commande test.

Erreurs à éviter

[ "$mystring"!="test" ]

Cela fournit exactement un argument de test à la commande. Avec un seul paramètre, il est défini par défaut sur le test -n : Il teste si une chaîne fournie est vide (FALSE) ou non (TRUE) – en raison du manque d’espaces pour séparer les arguments, la commande affichée finit toujours par TRUE !

L’instruction case

case valeur_testee in
valeur1) instruction(s);;
valeur2) instruction(s);;
valeur3) instruction(s);;
* ) instruction_else(s);;
...
esac

L’instruction case permet de comparer une valeur avec une liste d’autres valeurs et d’exécuter un bloc d’instructions lorsqu’une des valeurs de la liste correspond.

Opérateurs de comparaison logique

Opérateurs appliqués aux chaînes de caractères

OpérateursDescription
-z "$str"Vrai si la chaîne est vide (null)
-n "$str"Vraie si la chaîne n’est pas vide
"$str1" = "$str2"Vraie si match
"$str1" != "$str2"Vraie si différent
"$int1 \< "$int2"sorts before
"$int1 \> "$int2"sorts after

Opérateurs appliqués aux fichiers

OpérateursDescription
-f "$fichier"Vrai si c’est un fichier régulier existant
-d "$repertoire"Vraie si c’est un répertoire existant
-e "$chemin"Vraie si le chemin existe
-r, -w, -xVraie si lisible, écrivable, exécutable
"$file1" -nt "$file2"Plus récents que (newer than)
"$file1" -ot "$file2"Plus anciens que(older than)

Les opérateurs arithmétique

OpérateursDescription
int1 -eq int2égal
int1 -ne int2NOT equal
int1 -le int2less than or equal
int1 -ge int2greater than or equal
int1 -lt int2inférieur (less than)
int1 -gt int2supérieur (greater than)
! "$test"true, if test is false(NOT)