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 :
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
Bash a une builtin « test » (« [ ») qui diffère de l’instruction test.
Voilà comment elle évalue les expressions qui composent ses arguments :
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 » ] !