Tests

Mise à jour : Debian 10.0 Buster

Sommaire

1 - Principe

On distingue deux types de test

2 - Tests sur le résultat d'une commande

$ 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

3 - Tests sur l'évaluation d'une condition

3.1 - Principe

$ test 5 = 8
$ echo $?
1
$ [ 5 = 8 ]
$ echo $?
1
$ [[ 5 = 8 ]]
$ echo $?
1

Dans les exemples ci-dessus, la condition testées est 5 = 8, le résultat est 1, le test échoue

3.2 - Test sur les chaînes de caractère

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

3.3 - Test sur les nombres

     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
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

3.4 - Test sur les fichiers

     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

4 - Opérateurs logiques

4.1 - Non logique

L'opérateur ! inverse le résultat du test devant lequel il est situé

$ ! data

Command 'data' not found, did you mean:
.....

$ echo $?
0
$ ! [[ cinq = cinq ]]
$ echo $?
1
$ [[ cinq != huit ]]
$ echo $?
0
$ (( 5!=8 ))
$ echo $?
0

4.2 - Et logique

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
$ [[ toto = toto && titi = tata ]]
$ echo $?
1

équivalent à

$ [[ toto = toto ]] && [[ titi = tata ]]
$ echo $?
1
$ true && [[ titi = titi ]]
$ echo $?
0

4.3 - Ou logique

L'opérateur || combine le résultat de deux tests : le test réussit si l'un des deux tests réussit

$ [[ toto = toto || titi = tata ]]
$ echo $?
0
$ [[ toto = toto ]] || [[ titi = tata ]]
$ [[ toto = titi || titi = tata ]]
$ echo $?
1