[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