J'ai une question simple, mais je n'ai trouvé aucune réponse. Il existe deux commutateurs pour la condition if qui vérifient la présence d'un fichier: -e
et -f
.
Quelle est la différence entre ces deux-là?
Voir: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
Je pense que ce ne sont pas des "si commutateurs", plutôt des "commutateurs de test" (car vous devez les utiliser entre crochets [].
Mais la différence est:
[ -e FILE ]
True si FILE existe.
Cela retournera vrai pour les deux /etc/hosts
et /dev/null
.
[ -f FILE ]
True si FILE existe et est un fichier normal. Cela retournera vrai pour /etc/hosts
et faux pour /dev/null
(car ce n'est pas un fichier normal).
$ man bash
-e file
True if file exists.
-f file
True if file exists and is a regular file.
Un fichier normal est quelque chose qui n'est pas un répertoire/symlink/socket/device, etc.
-e
vérifie tout type d'objet du système de fichiers; -f
niquement recherche un fichier normal.
L'instruction if utilise en fait le programme "test" pour les tests. Vous pouvez écrire des instructions if de deux manières:
if [ -e filename ];
ou
if test -e filename;
Si vous le savez, vous pouvez facilement consulter la page de manuel pour "test" pour découvrir la signification des différents tests:
man test