Δημοσιεύτηκε: 29 Αύγ 2011, 01:01
από medigeek
Ξανακοιτάζοντας τον κώδικα, δεν υπάρχει λόγος για το elif, μιας και ήδη ελέγχεις με το if για -s (nonzero).
Δεν υπάρχει άλλη πιθανή περίπτωση εκτός από το να μην είναι -s (nonzero), οπόταν χρησιμοποιείς απλά το else:
Κώδικας: Επιλογή όλων
if [ -s .crypt_list_open ]; then
cat .crypt_list_open
else
printf "Δεν περιέχει ονόματα"
fi


clepto έγραψε:εσένα δουλεύει έτσι;


Χάριν παραδείγματος, αυτό δουλεύει :)
Κώδικας: Επιλογή όλων
if [ -s .crypt_list_open ]; then
cat .crypt_list_open
elif [ ! -s .crypt_list_open ]; then
printf "Δεν περιέχει ονόματα"
fi


Αν πάλι δεν κάνει αυτό που θες, μήπως δεν χρησιμοποιείς σωστά το -s;
Με το -s ελέγχει αν το αρχείο είναι nonzero μεγέθους:
* Αν περιέχει κάτι το αρχείο (εδώ χαρακτήρες), τότε το αρχείο είναι nonzero.
* Αν δεν περιέχει τίποτα (απολύτως τίποτα) και το μέγεθος του είναι zero, τότε δεν είναι nonzero.

http://linuxconfig.org/Bash_scripting_Tutorial
έγραψε:
11. Bash File Testing
-b filename Block special file
-c filename Special character file
-d directoryname Check for directory existence
-e filename Check for file existence
-f filename Check for regular file existence not a directory
-G filename Check if file exists and is owned by effective group ID.
-g filename true if file exists and is set-group-id.
-k filename Sticky bit
-L filename Symbolic link
-O filename True if file exists and is owned by the effective user id.
-r filename Check if file is a readable
-S filename Check if file is socket
-s filename Check if file is nonzero size
-u filename Check if file set-ser-id bit is set
-w filename Check if file is writable
-x filename Check if file is executable



Παραδείγματα:

Σωστό: Διαγράφοντας και ξαναδημιουργώντας το αρχείο:
έγραψε:$ rm -f moo
$ touch moo

$ ls -l moo
-rw-r--r-- 1 sav sav 0 2011-08-28 23:55 moo
$ # Πρόσεξε τον αριθμό μηδέν στο αποτέλεσμα
$ [ -s moo ] && echo "File is non-zero, contains characters" || echo "File is empty"
File is empty


Λάθος: Με το echo δεν αδειάζεις τελείως το αρχείο:
έγραψε:$ echo "" > moo

$ ls -l moo
-rw-r--r-- 1 sav sav 1 2011-08-28 23:55 moo
$ # Πρόσεξε τον αριθμό ένα στο αποτέλεσμα
$ [ -s moo ] && echo "File is non-zero, contains characters" || echo "File is empty"
File is non-zero, contains characters