Test (Unix)

Un article de Wikipédia, l'encyclopédie libre.

test est une commande Unix qui permet de créer des expressions conditionnelles.

Sommaire

[modifier] Syntaxe

test Expression ou [ Expression ] ou [[ Expression ]]

Exemple : test -f /home/test ou [ -f /home/test ] ou [[ -f /home/test ]]

[modifier] Description

la commande test évalue l'expression passée en argument. Dans sa seconde forme, chaque crochet ([]) doit obligatoirement être séparé de la condition par un espace. Les fonctions et opérateurs sont traités comme des arguments différents par la commande test. L'expression conditionnelle doit faire référence à une condition dont il est possible de répondre par vrai (true) ou faux (false).

[modifier] Fonctions

Les fonctions suivantes sont utilisées pour construire l'expression conditionnelle et retournent toutes vrai (true) si la condition est satisfaite :

-b Fichier -- Fichier existe et est un fichier spécial en mode bloc.
-c Fichier -- Fichier existe et est un fichier spécial en mode caractère.
-d Fichier -- Fichier existe et est un répertoire.
-e Fichier -- Fichier existe.
-f Fichier -- Fichier existe et est de type ordinaire.
-g Fichier -- Fichier existe et le bit Set Group ID est actif.
-h Fichier -- Fichier existe et est un lien symbolique.
-k Fichier -- Fichier existe et le sticky bit est actif.
-L Fichier -- Fichier existe et est un lien symbolique (même chose que -h).
-p Fichier -- Fichier existe et est un tube nommé (named pipe, FIFO).
-r Fichier -- Fichier existe et est accessible en lecture.
-s Fichier -- Fichier existe et a une taille non nulle.
-u Fichier -- Fichier existe et le bit Set User ID est actif.
-t Descripteur -- Le descripteur de fichier est ouvert et associé à un terminal.
-w Fichier -- Fichier existe et est spécifié comme étant accessible en écriture.
Toutefois, le fichier ne sera pas accessible en écriture sur un système de fichier en
lecture seule, même si le test indique vrai (true).
-x Fichier -- Fichier existe et est spécifié comme étant exécutable.
Si le fichier spécifié est un répertoire, une valeur de retour vrai (true) signifie que
le processus courant a la permission de parcourir ce répertoire.

[modifier] Fonctions de chaînes de caractères

-n Chaîne1         -- La longueur de la Chaîne1 n'est pas nulle.
-z Chaîne1         -- La longueur de la Chaîne1 est nulle.
Chaîne1 = Chaîne2  -- Chaîne1 et Chaîne2 sont identiques.
Chaîne1 != Chaîne2 -- Chaîne1 et Chaîne2 sont différentes.
Chaîne1            -- Chaîne1 n'est pas une chaîne de caractères nulle.

[modifier] Fonctions numériques

Entier1 -eq Entier2 -- Entier1 et Entier2 sont, algébriquement parlant, égaux.
Entier1 -ne Entier2 -- Entier1 n'est pas égal à Entier2.
Entier1 -gt Entier2 -- Entier1 est strictement supérieur à Entier2.
Entier1 -ge Entier2 -- Entier1 est supérieur ou égal à Entier2.
Entier1 -lt Entier2 -- Entier1 est strictement inférieur à Entier2.
Entier1 -le Entier2 -- Entier1 est inférieur ou égal à Entier2.
Fichier1 -nt Fichier2 -- Fichier1 est plus récent que Fichier2.
Fichier1 -ot Fichier2 -- Fichier1 est plus ancien que Fichier2.
Fichier1 -ef Fichier2 -- Fichier1 et Fichier2 pointent vers le même fichier (lien symbolique).

[modifier] Opérateurs

Toutes les fonctions ci-dessus peuvent être combinées avec les opérateurs suivants :

!  -- Opérateur unaire de la négation
-a -- Opérateur binaire ET
-o -- Opérateur binaire OU (l'opérateur -a est prioritaire sur l'opérateur -o)
\(Expression\) -- Les parenthèses pour effectuer des groupements doivent être échappées par des anti-slash (\).

[modifier] Codes de retour

La commande test retourne les valeurs suivantes :

0  -- L'expression conditionnelle est vraie (true).
1  -- L'expression conditionnelle est fausse (false).
>1 -- Une erreur s'est produite.

[modifier] Exemples

1. Pour tester si un fichier existe et n'est pas vide :

if test -s "$1"
then
    echo "$1 existe et n'est pas vide."
fi

Si le fichier spécifié dans le premier argument envoyé au script shell ($1) n'existe pas ou est vide, la commande test va retourner 1 et le script ne va rien afficher. Mais si au contraire le fichier existe et n'est pas vide, alors la commande test va retourner 0 et le script va afficher "MonFichier existe et n'est pas vide.".

Note: Il doit y avoir un espace entre l'option -s et le nom du fichier.

Les guillemets autour de $1 permettent de s'assurer que le test fonctionnera même si la valeur de $1 est nulle. Si les guillemets sont retirés et que $1 ne vaut rien, alors la commande test va retourner une erreur du type "test: argument expected.".

2. Pour vérifier qu'au moins un argument a été envoyé au script shell :

if [ $# -lt 1 ]
then
    echo "Erreur: il faut au moins un argument.";
    exit 2;
fi

Cette fois-ci, on utilise la deuxième notation de la commande test (les crochets). Dans le script ci-dessus, $# correspond au nombre d'arguments envoyés sur la ligne de commande. On regarde donc si ce nombre est strictement inférieur (-lt) à 1 et si c'est le cas, on affiche une erreur et on arrête le script en retournant un code d'erreur 2.

[modifier] Voir aussi

Autres langues