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érateurs | Description |
|---|---|
-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érateurs | Description |
|---|---|
-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, -x | Vraie 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érateurs | Description |
|---|---|
int1 -eq int2 | égal |
int1 -ne int2 | NOT equal |
int1 -le int2 | less than or equal |
int1 -ge int2 | greater than or equal |
int1 -lt int2 | inférieur (less than) |
int1 -gt int2 | supérieur (greater than) |
! "$test" | true, if test is false(NOT) |