Elmoricq a écrit :
if [ test1 -o test2 ]
ou
if [ test1 ] || [ test2 ]
if [ condition1 -lt 1 -a condition2 -lt 1 ]
ou
if [ condition1 -lt 1 ] && [ condition2 -lt 1 ]
|
Il faut faire attention à chaque écriture car elle n'est pas tout à fait équivalente.
La première, qui utilise les connecteurs "-a" (and) et "-o" (or) de l'instruction "test" correspond à un seul appel de cette instruction. Celle-ci est appelée une fois et fait toutes les comparaisons demandées même si le test est déjà définitif et devient donc inutile.
Exemple
Code :
- test -n "hello" -o -n "`touch /tmp/toto`"
|
Etant donné que "hello" n'est pas une chaine vide, le test est déjà vrai. Pourtant le fichier "/tmp/toto" est quand-même créé.
La seconde est une suite de deux instructions séparées par un connecteur and/or traité par le shell lui-même (et non par la commande "test" ). Il y a donc deux appels à l'instruction test mais si l'un des tests devient définitifs, l'ensemble s'arrête
Exemple
Code :
- test -n "hello" || test -n "`touch /tmp/toto`"
|
Le fichier "/tmp/toto" ne sera jamais créé
C'est bien de le savoir. Mais malgré le fait que l'ensemble "&&" et "||" puisse être plus rapide, personnellement je préfère utiliser "-a" et "-o" (et utiliser intelligemment le tableau de Karnaugh pour optimiser moi-même)...
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.