Pascal BEAUSSART

test


La commande test permet de vérifier :
les prérogatives d'un fichier
De comparer deux fichiers
De tester une variable ou une option particulière
De tester des chaines de caractères

Dans le cas d'évaluation composée à l'aide des opérateurs booléens, il est nécessaire de doubler les crochets.
Ainsi, vous pouver écrire :

if [ -z "$X" ] ou bien if [[ -z "$X" ]]
mais vous devez écrire :
if [[ -z "$X" && -n "$Y" ]]

Les 2 options de la commande test sont -a (and) et -o (or). Il agissent comme les opérateurs booléens mais ne sont que des options combinatoires. Vous devez écrire if [ -z "$X" -a -n "$Y" ] avec des simples crochets. Les doubles crochets créent une erreur de syntaxe car l'interpréteur traduit [[ -z "$X" ]] -a [[ -n "$Y" ]] et comme -a n'est pas une opération...

Dans tous ces tests penser bien à séparer les différents arguments par des blancs. Ecrire : [ a = b ] et non pas [ a=b ] ou [a = b]


[RETOUR] [HOME]

Tester les prérogatives d'un fichier

if test -option fichier est équivalent à if [[ -option fichier ]]

option :

 -a fichier    vrai si le fichier existe
 -r fichier    vrai si vous pouver lire le fichier
 -w fichier    vrai si le bit d'écriture du fichier est 'on'
 -x fichier    vrai si le fichier est un exécutable
 -f fichier    vrai si le fichier est ordinaire et qu'il existe
 -d fichier    vrai s'il existe et que c'est un répertoire
 -c fichier    vrai si c'est un fichier spécial caractères (device)
 -b fichier    vrai si c'est un fichier spécial block. (device)
 -p fichier    vrai si c'est un tube nommé (named pipe)
 -u fichier    vrai si le set userid est positionné (s flag)
 -g fichier    vrai si le set groupid est positionné (s flag)
 -k fichier    vrai si le sticky bit est positionné (t flag)
 -s fichier    vrai si fichier n'est pas vide
 -L fichier    vrai si c'est un lien symbolique
 -O fichier    vrai si vous êtes le propriétaire du fichier
 -G fichier    vrai si vous faites partie du groupe owner
 -S fichier    vrai si le fichier est du type socket
Remarques : attention aux droits d'accés du système de fichiers
[RETOUR] [HOME]

Comparer deux fichiers

-nt Tester si fic1 est plus récent que le fic2 : (newer than)
if test fic1 -nt fic2 est équivalent à if [[ fic1 -nt fic2 ]]
-ot Tester si fic1 est plus ancien que le fic2 : (older than)
if test fic1 -ot fic2 est équivalent à if [[ fic1 -ot fic2 ]]
-eq Tester si fic1 un autre nom de fic2 : (equal file)
if test fic1 -eq fic2 est équivalent à if [[ fic1 -eq fic2 ]]


[RETOUR] [HOME]

Tester une variable ou une option particulière

-z $variable vrai si la variable est d'une longueur nulle
if [[ -z $XSTATION ]]
then echo "vous travaillez sur une Xstation"
fi
-n $variable vrai si la variable n'est pas d'une longueur nulle
reponse=$(ps -u $USER | grep x3270)
if [[ -n $reponse ]]
then echo "vous avez des fenêtres x3270 ouvertes"
fi
-t n n correspond au descripteur de fichier : 1 stdout, 2 stderr, etc ...
Il est optionnel et est égal à 1 par défaut (stdout).
La réponse est vraie si le descripteur de fichier n est ouvert
ou dans le cas par défaut si vous dispozez d'une sortie standard.

-o option vrai si l'option est active (voir la commande set)


Tester des chaines de caractères

Comparaison de 2 chaines :
chaine1 = chaine2 vrai si égales
chaine1 != chaine2 vrai si différentes
chaine1 < chaine2 vrai si chaine1 est alphabétiquement avant la chaine2
chaine1 > chaine2 vrai si chaine1 est alphabétiquement après la chaine2

Comparaison d'une chaine avec un modèle
chaine = modèle vrai si la chaine correspond au modèle
chaine != modèle vrai si la chaine ne correspond pas au modèle


Exemple :


if [[ $USER = [a-c]* ]]
then  echo "votre userid commence par a, b ou c"
fi

Le fichier est il accessible en lecture ?


[[ -r $file ]] && echo "Ok" || echo "Non-Ok"

[RETOUR] [HOME]