Mise à jour : Debian 10.0 Buster
Sommaire
On distingue deux types de test
$ date
mercredi 10 février 2021, 18:37:30 (UTC+0100)
$ echo $?
0
$ date -h
date : option invalide -- 'h'
Saisissez « date --help » pour plus d'informations.
$ echo $?
1
$ true
$ echo $?
0
$ false
$ echo $?
1
test <condition>, par exemple
$ test 5 = 8
$ echo $?
1
crochet simple [ <condition> ], par exemple
$ [ 5 = 8 ]
$ echo $?
1
double crochets : [[ <condition> ], par exemple
$ [[ 5 = 8 ]]
$ echo $?
1
Dans les exemples ci-dessus, la condition testées est 5 = 8, le résultat est 1, le test échoue
TEST # TEST réussi si
---------------------------------------------------------------------------------
[[ "Exemple" ]] # La chaîne de caractères "Exemple" comprend au moins 1 caractère
[[ -n "Exemple" ]] # La chaîne de caractère "Exemple" comprend au moins 1 caractère
[[ -z "Exemple" ]] # La chaîne de caractère "Exemple" comprend 0 caractères
TEST # TEST réussi si
---------------------------------------------------------------------------------
[[ chaîne1 = chaîne2 ]] # Les chaînes de caractère sont identiques
[[ chaîne1 != chaîne2 ]] # Les chaînes de caractère sont différentes
$ [[ abcde = abcde ]]
$ echo $?
0
TEST # TEST réussi si
---------------------------------------------------------------------------------
[[ val1 -eq val2 ]] # Val1 et val2 sont égaux
[[ val1 -ne val2 ]] # Val1 et val2 sont différents
[[ val1 -lt val2 ]] # Val1 inférieure à val2
[[ val1 -gt val2 ]] # Val1 supérieure à val2
[[ val1 -ge val2 ]] # Val1 supérieure ou égal à val2
[[ val1 -le val2 ]] # Val1 inférieure ou égal à val2
Note : il est aussi possible de comparer deux valeurs en utilisant les commandes de calcul arithmétique
TEST # TEST réussi si
---------------------------------------------------------------------------------
(( val1 == val2 )) # Val1 et val2 sont égaux
(( val1 != val2 )) # Val1 et val2 sont différents
(( val1 <= val2 )) # Val1 est inférieur ou égal à valeur 2
(( val1 > val2 )) # val1 est supérieur à val2
$ ((5<=2**3)) # Équivalent à (( 5<= 2**3) etc ....
$ echo $?
0
$ chaine=aazerazer
$ [[ ${#chaine} -ge 5 ]] # Test réussi si la longueur de la chaîne est supérieure à 5
TEST # TEST réussi si
----------------------------------------------------------------------------------
[[ -e fichier ]] # Fichier existe
[[ -f fichier ]] # Fichier existe et est ordinaire
[[ -d répertoire ]] # Répertoire existe
[[ -L lien ]] # Lien est un lien symbolique
[[ -x fichier ]] # Fichier existe et est exécutable
[[ -r fichier ]] # Fichier existe et est ouvert en lecture [[ -w fichier ]] # Fichier existe et est ouvert en écriture
[[ -s fichier ]] # Fichier existe et a une taille supérieure à 0 octets
TEST # TEST réussi si
----------------------------------------------------------------------------------
[[ fichier1 -ef fichier2 ]] # Fichier1 et fichier2 ont les mêmes numéros de périphérique et d'inoeud
[[ fichier1 -nt fichier2 ]] # Fichier1 est plus récent (newer than) fichier2
[[ fichier1 -ot fichier2 ]] # Fichier1 est plus ancien (older than) fichier2
L'opérateur ! inverse le résultat du test devant lequel il est situé
$ ! data
Command 'data' not found, did you mean:
.....
$ echo $?
0
Inversion du résultat d'un test
$ ! [[ cinq = cinq ]]
$ echo $?
1
Note : Ne pas confondre ! avec l'opérateur != , utilisé
pour comparer des chaînes de caractère
$ [[ cinq != huit ]]
$ echo $?
0
$ (( 5!=8 ))
$ echo $?
0
L'opérateur && combine le résultat de deux tests : le test réussit si les deux tests sont réussis
$ true && true
$ echo $?
0
$ true && false
$ echo $?
1
& logique sur deux tests,
$ [[ toto = toto && titi = tata ]]
$ echo $?
1
équivalent à
$ [[ toto = toto ]] && [[ titi = tata ]]
$ echo $?
1
$ true && [[ titi = titi ]]
$ echo $?
0
L'opérateur || combine le résultat de deux tests : le test réussit si l'un des deux tests réussit
Ou logique exemple : une condition est vraie, la combinaison réussit
$ [[ toto = toto || titi = tata ]]
$ echo $?
0
$ [[ toto = toto ]] || [[ titi = tata ]]
$ [[ toto = titi || titi = tata ]]
$ echo $?
1