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” ] !