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.