Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 
Auteur Message
MessagePosté: 01 Sep 2010 10:55 
Hors ligne
Très bavard(e)!

Inscription: 19 Mai 2010 14:49
Messages: 354
Localisation: Ile de France
Bonjour,
j'ai un petit script de rangement qui prends 2 arguments : le premier indique le répertoire de rangement, et le deuxième (optionnel), celui où iront les fichiers rangés.
Le code :
Code:
if [ -e $1 ] && [ -d $1 ]
then
   echo "Rangement du répertoire $1"
else
   echo "Syntaxe : rangement.sh dossier_a_ranger [dossier_ou_ranger]"
   exit
fi
#Si on précise $2, on enverra là bas, sinon ce sera dans $1
if [ -e $2 ] && [ -d $2 ]
then
   destination=$2
else
   destination=$1
fi
echo $destination

Le premier if marche bien, si c'est pas un répertoire, il envoie la syntaxe.
Mais mystérieusement, le deuxième if affecte à destination la valeur de $2, toujours, même quand je ne renseigne pas celui ci.
Une idée ?
Glorf

_________________
Debian squeeze
2.6.32-5-amd64
GeForce GT 220, drivers proprio Nvidia.


Haut
 Profil  
 
MessagePosté: 01 Sep 2010 11:21 
Hors ligne
Très bavard(e)!

Inscription: 29 Juil 2009 18:11
Messages: 294
Bonjour,

Bash a une builtin "test" ("[") qui diffère de l'instruction test.

Voilà comment elle évalue les expressions qui composent ses arguments :
man bash a écrit:
test and [ evaluate conditional expressions using a set of rules based on the number of arguments.

0 arguments
The expression is false.
1 argument
The expression is true if and only if the argument is not null.

2 arguments
If the first argument is !, the expression is true if and only if the second argument is null. If the first argument is one of the
unary conditional operators listed above under CONDITIONAL EXPRESSIONS, the expression is true if the unary test is true. If the
first argument is not a valid unary conditional operator, the expression is false.
3 arguments
If the second argument is one of the binary conditional operators listed above under CONDITIONAL EXPRESSIONS, the result of the
expression is the result of the binary test using the first and third arguments as operands. The -a and -o operators are considered
binary operators when there are three arguments. If the first argument is !, the value is the negation of the two-argument test
using the second and third arguments. If the first argument is exactly ( and the third argument is exactly ), the result is the
one-argument test of the second argument. Otherwise, the expression is false.
4 arguments
If the first argument is !, the result is the negation of the three-argument expression composed of the remaining arguments. Other‐
wise, the expression is parsed and evaluated according to precedence using the rules listed above.
5 or more arguments
The expression is parsed and evaluated according to precedence using the rules listed above.


Il faut comprendre que if [ -e $2 ] && [ -d $2 ] se traduit pas if [ -e ] && [ -d ] après l'expansion des variables.

Du coup, les deux "test n'ont qu'un seul argument (-e pour l'un et -d pour l'autre)
Ces arguments sont considérés comme étant des chaines de caractères et non comme des opérateurs conditionnels. Ainsi, la règle "1 argument" est appliquée.

Pour résoudre ton problème, il faut encadrer ta variable $2 :
if [ -e "$2" ] && [ -d "$2" ]

Tu conviendras qu'il faut faire la même chose pour if [ -e "$1" ] && [ -d "$1" ] !


Haut
 Profil  
 
MessagePosté: 01 Sep 2010 11:34 
Hors ligne
Très bavard(e)!

Inscription: 19 Mai 2010 14:49
Messages: 354
Localisation: Ile de France
Ah oui ça marche beaucoup mieux merci !
Je passe le sujet en résolu

_________________
Debian squeeze
2.6.32-5-amd64
GeForce GT 220, drivers proprio Nvidia.


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 3 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.084s | 12 Queries | GZIP : Off ]