Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Tuteurs informatique
Nous contacter
Utiliser ce site
Actu et stages
Tests et calcul
Docs à imprimer
Plan du site
Rechercher
arithmétique
Les tuteurs
Unix Qu'est-ce qu'un test ?
Shell Une condition
Boucles
Commandes Code de retour d'un test
Entrée/sortie Les opérateurs
Fonctions Opérateurs logiques
Présentation Opérateurs arithmétiques
Scripts Opérateurs sur les fichiers
Tests
Variables
Une condition
Le shell propose deux principales façons de réaliser un test ; ces deux méthodes sont
équivalentes :
test expression
[ expression ]
http://www.tuteurs.ens.fr/unix/shell/test.html 1/5
19/10/2017 Tests
done
démarrer
Les opérateurs
Opérateurs logiques
Non : l'opérateur « ! »
Pour illustrer l'usage de cet opérateur, voici quatre cas de figure différents :
# Premier cas
[ -f foo ] && echo "Le fichier foo existe."
Dans l'exemple précédent, le shell teste si le fichier foo existe. Comme il n'existe pas, le
code de retour de ce test est faux (un nombre différent de 0). Or, l'opérateur « && »
n'exécute ce qui suit que si le code de retour est vrai (i.e. 0) car si a est faux alors a&&b sera
aussi nécessairement faux. Comme ce n'est pas le cas, les commandes ne sont pas exécutées.
# Deuxième cas
[ -f foo ] || echo "Le fichier foo n'existe pas."
Le fichier foo n'existe pas.
Dans cet exemple, l'opérateur n'est plus « && » mais « || ». Les commandes ne s'exécutent
que si le code de retour vaut faux (i.e. différent de 0); comme c'est le cas, elles sont
exécutées. En effet si a est vrai alors a||b sera aussi nécessairement vrai, ce n'est pas la peine
de l'exécuter.
# Troisième cas
[ ! -f foo ] && echo "Le fichier foo n'existe pas."
Le fichier foo n'existe pas.
Ici, l'opérateur est de nouveau « && » ; mais contrairement aux deux exemples précédents,
le test n'est plus [ -f foo ] mais [ ! -f foo ]. Par conséquent, le code de retour est vrai
(i.e. 0), et les commandes sont exécutées.
# Quatrième cas
[ ! -f foo ] || echo "Le fichier foo existe."
Voici la dernière combinaison possible. Le code de retour est vrai (i.e 0), mais il fallait faux
(e.g. 1) pour que les commandes soient exécutées.
Ces quatre exemples correspondent aux énoncés suivants :
s'il est vrai que foo existe, alors il faut écrire : « Le fichier foo existe. ».
s'il n'est pas vrai que foo existe, alors il faut écrire : « Le fichier foo n'existe pas. ».
s'il est vrai que foo n'existe pas, alors il faut écrire : « Le fichier foo n'existe pas. ».
s'il n'est pas vrai que foo n'existe pas, alors il faut écrire : « Le fichier foo existe. ».
Reformulation avec if
http://www.tuteurs.ens.fr/unix/shell/test.html 2/5
19/10/2017 Tests
then echo "Le fichier foo existe."
else continue
fi
# Deuxième cas
if [ -f foo ]
then continue
else echo "Le fichier foo n'existe pas."
fi
# Troisième cas
if [ ! -f foo ]
then echo "Le fichier foo n'existe pas."
else continue
fi
# Quatrième cas
if [ ! -f foo ]
then continue
else echo "Le fichier foo existe."
fi
Et : l'opérateur « -a »
Si vous débutez, vous n'êtes pas tenu de retenir par cœur toutes les combinaisons
possibles. Sachez simplement les reconnaître si vous les lisez quelque part ; et pour vos
propres scripts, vous il vous suffit de savoir bien manipuler la syntaxe qui vous paraît la plus
lisible.
Ou : l'opérateur « -o »
Pour réaliser la condition de l'opérateur « ou », il suffit qu'une seule des conditions qu'il
rassemble soit vraie :
Exemple :
if [[ "$fichier" == "fichier_interdit" -o ! -f "$fichier" ]]
then echo "Je ne veux pas lire $fichier ou bien il n'existe pas."
fi
http://www.tuteurs.ens.fr/unix/shell/test.html 3/5
19/10/2017 Tests
Opérateurs arithmétiques
Le shell permet d'opérer des calculs arithmétiques, même s'il est moins puissant que
d'autres langages (Perl, Scheme, C, etc.) pour cela.
Les opérateurs sont les suivants :
On utilise ces opérateurs entre deux nombres ou variables numériques. Par exemple :
#!/bin/sh
if test 2 -lt 3
then echo "C'est normal."
fi
if test 2 -gt 3
then echo "C'est absurde."
fi
petit=2
grand=3
nature du fichier :
-e (exists) : vérifie l'existence d'un fichier ;
-f (file) : vérifie l'existence d'un fichier, et le fait qu'il s'agisse bien d'un fichier
au sens strict ;
-d (directory) : vérifie l'existence d'un répertoire ;
-L (link) : vérifie si le fichier est un lien symbolique ;
attributs du fichier :
-s (size) : vérifie qu'un fichier n'est pas vide ;
droits sur le fichier :
-r (readable) : vérifie si un fichier peut être lu ;
-w (writable) : vérifie si un fichier peut être écrit ou modifié ;
-x (writable) : vérifie si un fichier peut être exécuté ;
comparaison de fichiers :
http://www.tuteurs.ens.fr/unix/shell/test.html 4/5
19/10/2017 Tests
-nt (newer than) : vérifie si un fichier est plus récent qu'un autre ;
-ot (older than) : vérifie si un fichier est plus ancien qu'un autre.
Exemple :
#!/bin/sh
if test -e ~/.emacs
then echo "~/.emacs existe."
else echo "~/.emacs n'existe pas."
fi
if test -d ~/.emacs
then echo "~/.emacs est un répertoire."
else echo "~/.emacs n'est pas un répertoire."
fi
if test -f ~/.emacs
then echo "~/.emacs est un fichier."
else echo "~/.emacs n'est pas un fichier."
fi
http://www.tuteurs.ens.fr/unix/shell/test.html 5/5