[Bash]Tester si un argument est un dossier

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

Bonjour,

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

Ah oui ça marche beaucoup mieux merci !
Je passe le sujet en résolu