J’ai un script bash:
echo " enter file name " read $file if [ -f "$file" ] && [ -s "$file" ] then echo " file does not exist, or is empty " else echo " file exists and is not empty " fi
Peu importe ce que j’entre dans un $file
, cela me donne une fausse valeur. Je peux même entrer un fichier qui n’existe même pas, ça me donnera toujours la fausse valeur. Pourquoi est-ce les gars? Merci d’avance
Il suffit de vérifier pour -s
, car il est dit:
FILE existe et a une taille supérieure à zéro
http://unixhelp.ed.ac.uk/CGI/man-cgi?test
votre sortie est également commutée, donc elle does not exists
quand un fichier existe, car -s
donnera TRUE
si le fichier existe ET a une size > 0
.
Donc, vous devez utiliser correctement:
echo " enter file name " read file if [ -s "$file" ] then echo " file exists and is not empty " else echo " file does not exist, or is empty " fi
Cela vous donnera le résultat attendu.
Aussi il devrait être
read file
au lieu de
read $file
Si vous souhaitez plus d’informations, je vous recommande de lire le man test
man read
et de le man read
Veuillez noter que [ -f "$file" ] && [ -s "$file" ]
renverra true
si le fichier existe et n’est pas vide.
Autre option:
if [[ -f "/path/to/file" && -s "/path/to/file" ]]; then echo "exist and not empty" else echo "not exist or empty"; fi