2015-05-06 9 views
10

Ho uno script bash:Se il file esiste e non è vuoto. mi dà sempre il valore false

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 

Non importa quello che entrare come $file, mi dà il valore false. Posso anche inserire un file che non esiste nemmeno, mi darà comunque il valore falso. Perché quei ragazzi? Grazie in anticipo

+0

È necessario uno spazio dopo la '' && – rojomoke

+0

'stato il mio editing errore, ho riparato. Ma questa soluzione non funziona. – semkius

+0

E i test '-f' per il file esistente, ma ce l'hai nella parte" non esiste " – rojomoke

risposta

25

E 'sufficiente verificare la presenza di -s, perché dice: esiste

FILE e ha una dimensione maggiore di zero

http://unixhelp.ed.ac.uk/CGI/man-cgi?test

anche la vostra uscita viene attivata , quindi emette does not exists quando esiste un file, perché -s darà TRUE se il file esiste E ha un size > 0.

così correttamente si dovrebbe usare:

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 

Questo vi darà i risultati attesi.

Inoltre dovrebbe essere

read file 

invece di

read $file 

Se volete ulteriori informazioni, Consiglierei leggendo man test e man read

+0

Grazie. Ha funzionato. – semkius

0

Si prega di notare, che [ -f "$file" ] && [ -s "$file" ] tornerà true se il file esiste e non è vuoto.

altra opzione:

if [[ -f "/path/to/file" && -s "/path/to/file" ]]; then 
    echo "exist and not empty" 
else 
    echo "not exist or empty"; 
fi 
Problemi correlati