Δημοσιεύτηκε: 29 Αύγ 2011, 01:01
Ξανακοιτάζοντας τον κώδικα, δεν υπάρχει λόγος για το elif, μιας και ήδη ελέγχεις με το if για -s (nonzero).
Δεν υπάρχει άλλη πιθανή περίπτωση εκτός από το να μην είναι -s (nonzero), οπόταν χρησιμοποιείς απλά το else:
Χάριν παραδείγματος, αυτό δουλεύει
Αν πάλι δεν κάνει αυτό που θες, μήπως δεν χρησιμοποιείς σωστά το -s;
Με το -s ελέγχει αν το αρχείο είναι nonzero μεγέθους:
* Αν περιέχει κάτι το αρχείο (εδώ χαρακτήρες), τότε το αρχείο είναι nonzero.
* Αν δεν περιέχει τίποτα (απολύτως τίποτα) και το μέγεθος του είναι zero, τότε δεν είναι nonzero.
http://linuxconfig.org/Bash_scripting_Tutorial
Παραδείγματα:
Σωστό: Διαγράφοντας και ξαναδημιουργώντας το αρχείο:
Λάθος: Με το echo δεν αδειάζεις τελείως το αρχείο:
Δεν υπάρχει άλλη πιθανή περίπτωση εκτός από το να μην είναι -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