Comment tester si un dossier existe ?

Comment tester si un dossier existe ? - Shell/Batch - Programmation

Marsh Posté le 12-03-2006 à 20:51:36    

Bonsoir à tous,
 
je crée un petit script bash, et j'ai besoin de savoir si un fichier ou un dossier existe.
Donc, j'ai lus qu'il existait la commande test, mais je ne sais pas comment récupérer son résultat.
 
Car quand je lance "test -d /home" dans un terminal, rien n'est renvoyé, et pareil si le dossier n'existe pas.
 
Je vous remercie.
 
Willits

Reply

Marsh Posté le 12-03-2006 à 20:51:36   

Reply

Marsh Posté le 12-03-2006 à 20:59:22    

Il faut faire :
if [ -d "/home" ]; then
 echo "/home existe bien"
else
 echo "existe pas"
fi

Reply

Marsh Posté le 13-03-2006 à 10:16:43    

Willits a écrit :

Donc, j'ai lus qu'il existait la commande test, mais je ne sais pas comment récupérer son résultat.


 
La commande "test" (qu'on peut aussi écrire "[ ... ]" sert à tester toute sorte d'égalité, inégalités, caractéristiques diverses sur les fichiers dans Unix (et systèmes apparentés)
 
Son principe est de ne rien afficher (sauf s'il y a une erreur de syntaxe) mais de stocker le résultat du test dans la variable "$?" (qui sert à indiquer l'état final d'une commande => 0 = OK, , not(0) = pas ok).
 
Donc le premier moyen de se récupérer le résultat de la commande "test" est de le faire de cette manière:

test <quelque chose>
echo $?


Si on a "0", c'est que le test a réussi. Si on n'a pas 0, c'est que le test a échoué.
 
Ensuite, comme l'a dit sod4, on peut inclure le test dans une alternative "if" qui permet, en fonction du résultat du test, de se brancher sur un bloc "then" ou un bloc "else". Mais bien que dans 98% des cas on trouve des "if test" ou "if [ ... ]", rien n'oblige d'utiliser "test" dans un "if" (on peut très bien utiliser une autre commande que "test" après un "if" ) ou d'utiliser un "if" pour faire un "test" (on peut très bien faire un simple "test" et récupérer "$?" pour s'en servir ailleurs...)
 

Willits a écrit :

Car quand je lance "test -d /home" dans un terminal, rien n'est renvoyé, et pareil si le dossier n'existe pas.


Ne pas confondre "rien n'est renvoyé" et "rien ne s'affiche"...
 

Willits a écrit :

j'ai besoin de savoir si un fichier ou un dossier existe.


test -d => teste l'existence d'un dossier (un fichier de type "d" )
test -f => teste l'existence d'un fichier (fichier de type "-" )
test -L => teste l'existence d'un lien symbolique (fichier de type "l" )
test -s => teste l'existence d'un socket (fichier de type "s" )
test -b => teste l'existence d'un fichier I/O en mode bloc (fichier de type "b" )
test -c => teste l'existence d'un fichier I/O en mode caractère (fichier de type "c" )
test -e => teste l'existence d'un fichier quel que soit son  
type mais ne fonctionne qu'en bash. Pour faire pareil en "sh" (vieux Unix), il faut faire  
"ls -d <fichier> 1>/dev/null 2>&1"
 
Petit danger => "test -d" sur un lien symbolique vers un dossier renvoie "vrai" (le test s'applique sur la cible du lien et non sur le lien lui-même). Si on veut tester que le fichier est un vrai répertoire, il faut faire un test de ce type

test -d dossier -a ! -L dossier


 
Cours complet et en français de shell ici: http://fr.lang.free.fr/cours/Shell_v1.4.pdf


Message édité par Sve@r le 13-03-2006 à 10:27:06

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed