Η εντολή δοκιμής μπορεί να χρησιμοποιηθεί στη γραμμή εντολών του Linux για να συγκρίνει ένα στοιχείο με το άλλο, αλλά χρησιμοποιείται συχνότερα σε δέσμες ενεργειών BASH ως μέρος των δηλώσεων υπό όρους που ελέγχουν τη λογική και τη ροή του προγράμματος.
Ένα βασικό παράδειγμα
Μπορείτε να δοκιμάσετε αυτές τις εντολές απλά ανοίγοντας ένα παράθυρο τερματικού .
δοκιμή 1 -eq 2 && echo "ναι" || echo "no"
Η παραπάνω εντολή μπορεί να αναλυθεί ως εξής:
- test - αυτό σημαίνει ότι πρόκειται να κάνετε μια σύγκριση
- 1 - το πρώτο στοιχείο που θα συγκρίνετε
- -eq (πώς συγκρίνετε, στην περίπτωση αυτή, ελέγχετε αν ένας αριθμός είναι ίσος με τον άλλο)
- 2 - το στοιχείο που συγκρίνετε πάλι το πρώτο στοιχείο
- && - εκτελέστε την ακόλουθη δήλωση αν το αποτέλεσμα είναι αληθές
- echo "ναι" - η εντολή για εκτέλεση αν η σύγκριση επιστρέφει αλήθεια
- || - εκτελέστε την παρακάτω δήλωση αν το αποτέλεσμα είναι ψευδές
- echo "no" - η εντολή για εκτέλεση αν η σύγκριση επιστρέφει ψευδής
Στην ουσία, η εντολή συγκρίνει 1 με 2 και ταιριάζουν με την εντολή echo "ναι" που εκτελείται, η οποία εμφανίζει "ναι" και αν δεν ταιριάζουν με την εντολή echo "no" εκτελείται η οποία εμφανίζει "no".
Συγκρίνοντας τους αριθμούς
Αν συγκρίνετε στοιχεία που αναλύονται ως αριθμοί, μπορείτε να χρησιμοποιήσετε τους ακόλουθους χειριστές σύγκρισης:
- -eq - έχει τιμή 1 ίση τιμή 2
- -ge - είναι η τιμή 1 μεγαλύτερη ή ίση με την τιμή 2
- -gt - είναι τιμή 1 μεγαλύτερη από την τιμή 2
- -le - είναι τιμή 1 μικρότερη ή ίση με την τιμή 2
- -lt - είναι τιμή 1 μικρότερη από την τιμή 2
- -ne - η τιμή 1 δεν είναι ίση τιμή 2
Παραδείγματα:
δοκιμή 1 -eq 2 && echo "ναι" || echo "no"
(εμφανίζει "όχι" στην οθόνη επειδή το 1 δεν είναι ίσο με 2)
δοκιμή 1 -ζ 2 && echo "ναι" || echo "no"
(εμφανίζει "όχι" στην οθόνη επειδή το 1 δεν είναι μεγαλύτερο ή ίσο με 2)
δοκιμή 1 -gt 2 && echo "ναι" || echo "no"
(εμφανίζει "όχι" στην οθόνη επειδή το 1 δεν είναι μεγαλύτερο από 2)
δοκιμή 1-ο 2 && echo "ναι" || echo "no"
(εμφανίζει "ναι" στην οθόνη επειδή το 1 είναι μικρότερο ή ίσο με 2)
δοκιμή 1 -lt 2 && echo "ναι" || echo "no"
(εμφανίζει "ναι" στην οθόνη επειδή το 1 είναι μικρότερο ή ίσο με 2)
δοκιμή 1 -ένα 2 & & echo "ναι" || echo "no"
(εμφανίζει "ναι" στην οθόνη επειδή το 1 δεν είναι ίσο με 2)
Σύγκριση κειμένου
Αν συγκρίνετε στοιχεία που αναλύονται ως συμβολοσειρές, μπορείτε να χρησιμοποιήσετε τους ακόλουθους χειριστές σύγκρισης:
- = - η συμβολοσειρά 1 αντιστοιχεί στη συμβολοσειρά 2
- ! = - είναι η συμβολοσειρά 1 διαφορετική από τη συμβολοσειρά 2
- -n - είναι το μήκος της συμβολοσειράς μεγαλύτερο από 0
- -z - είναι το μήκος της συμβολοσειράς 0
Παραδείγματα:
δοκιμή "string1" = "string2" && echo "ναι" || echo "no"
(εμφανίζει "όχι" στην οθόνη επειδή "string1" δεν ισούται με "string2")
δοκιμή "string1"! = "string2" && echo "ναι" || echo "no"
(εμφανίζει "ναι" στην οθόνη επειδή "string1" δεν ισούται με "string2")
δοκιμή -n "string1" && echo "ναι" || echo "no"
(εμφανίζει "ναι" στην οθόνη επειδή το "string1" έχει μήκος συμβολοσειράς μεγαλύτερο από το μηδέν)
δοκιμή -z "string1" && echo "ναι" || echo "no"
(εμφανίζει "όχι" στην οθόνη επειδή το "string1" έχει μήκος συμβολοσειράς μεγαλύτερο από το μηδέν)
Σύγκριση αρχείων
Εάν συγκρίνετε αρχεία, μπορείτε να χρησιμοποιήσετε τους ακόλουθους χειριστές σύγκρισης:
- -ef - Τα αρχεία έχουν την ίδια συσκευή και τους αριθμούς εισόδου (είναι το ίδιο αρχείο)
- -nt - Είναι το πρώτο αρχείο νεότερο από το δεύτερο αρχείο
- -ot - Είναι το πρώτο αρχείο μεγαλύτερο από το δεύτερο αρχείο
- -b - Το αρχείο υπάρχει και είναι αποκλειστικό
- -c - Το αρχείο υπάρχει και είναι ειδικός χαρακτήρας
- -d - Το αρχείο υπάρχει και είναι ένας κατάλογος
- -e - Το αρχείο υπάρχει
- -f - Το αρχείο υπάρχει και είναι κανονικό αρχείο
- -g - Το αρχείο υπάρχει και έχει τον καθορισμένο αριθμό ομάδας
- -G - Το αρχείο υπάρχει και ο κάτοχος από την ομάδα του χρήστη
- -h - Το αρχείο υπάρχει και είναι ένας συμβολικός σύνδεσμος
- -k - Το αρχείο υπάρχει και έχει το κολλητικό του bit ρυθμισμένο
- -L - Το ίδιο με το -h
- -O - Το αρχείο υπάρχει εσείς είστε ο ιδιοκτήτης
- -p - Το αρχείο υπάρχει και είναι ένα όνομα σωλήνα
- -r - Το αρχείο υπάρχει και είναι αναγνώσιμο
- -s - Το αρχείο υπάρχει και έχει μέγεθος μεγαλύτερο από το μηδέν
- -S - Το αρχείο υπάρχει και είναι υποδοχή
- -t - Ο περιγραφέας του αρχείου ανοίγει σε ένα τερματικό
- -u - Το αρχείο υπάρχει και έχει ρυθμιστεί το bit-set id-set
- -w - Το αρχείο υπάρχει και είναι εγγράψιμο
- -x - Το αρχείο υπάρχει και είναι εκτελέσιμο
Παραδείγματα:
test / διαδρομή / to / file1 -n / path / to / file2 & & echo "ναι"
(Εάν το αρχείο1 είναι νεότερο από το αρχείο2 τότε θα εμφανιστεί η λέξη "ναι")
test -e / path / to / file1 & & echo "ναι"
(εάν υπάρχει αρχείο1, θα εμφανιστεί η λέξη "ναι")
δοκιμή -O / διαδρομή / προς / αρχείο1 & & echo "ναι"
(αν έχετε το αρχείο1, τότε εμφανίζεται η λέξη "ναι")
Ορολογία
- Block special - Το αρχείο είναι μια συσκευή block που σημαίνει ότι τα δεδομένα διαβάζονται σε μπλοκ των bytes. Αυτά είναι γενικά αρχεία συσκευών, όπως σκληρούς δίσκους.
- Ειδικός χαρακτήρας - Το αρχείο ενεργεί αμέσως όταν γράφετε σε αυτό και είναι συνήθως μια συσκευή όπως μια σειριακή θύρα
Συγκρίνοντας πολλαπλούς όρους
Μέχρι στιγμής όλα έχουν συγκρίνει ένα πράγμα με το άλλο αλλά τι γίνεται αν θέλετε να συγκρίνετε δύο συνθήκες.
Για παράδειγμα, αν ένα ζώο έχει 4 πόδια και πηγαίνει "moo" είναι πιθανώς μια αγελάδα. Απλά ο έλεγχος για τα 4 πόδια δεν εγγυάται ότι έχετε μια αγελάδα αλλά τον έλεγχο του ήχου που κάνει σίγουρα.
Για να ελέγξετε ταυτόχρονα και τους δύο όρους, χρησιμοποιήστε την ακόλουθη δήλωση:
δοκιμή 4 -eq 4 -a "moo" = "moo" && echo "είναι αγελάδα" || echo "δεν είναι αγελάδα"
Το βασικό μέρος εδώ είναι το -α το οποίο αντιπροσωπεύει και.
Υπάρχει ένας καλύτερος και συνηθέστερος τρόπος εκτέλεσης της ίδιας δοκιμής και είναι ο εξής:
test 4 -eq 4 && test "moo" = "moo" && echo "είναι αγελάδα" || echo "δεν είναι αγελάδα"
Μια άλλη δοκιμή που ίσως θελήσετε να κάνετε είναι να συγκρίνετε δύο δηλώσεις και αν είτε είναι αληθής εξάγει μια συμβολοσειρά. Για παράδειγμα, αν θέλετε να ελέγξετε ότι υπάρχει ένα αρχείο με όνομα "file1.txt" ή υπάρχει αρχείο που ονομάζεται "file1.doc", μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή
test -e file1.txt -o -e αρχείο1.doc && echo "αρχείο1 υπάρχει" || echo "αρχείο1 δεν υπάρχει"
Το βασικό μέρος εδώ είναι το -ο που αντιπροσωπεύει ή.
Υπάρχει ένας καλύτερος και συνηθέστερος τρόπος εκτέλεσης της ίδιας δοκιμής και είναι ο εξής:
test -e file1.txt || test -e file1.doc && echo "αρχείο1 υπάρχει" || echo "αρχείο1 δεν υπάρχει"
Εξάλειψη της λέξης κλειδιού δοκιμής
Δεν χρειάζεται πραγματικά να χρησιμοποιήσετε τη δοκιμή λέξεων για να εκτελέσετε τη σύγκριση. Το μόνο που έχετε να κάνετε είναι να περικλείσετε τη δήλωση σε αγκύλες ως εξής:
[-e αρχείο1.txt] && echo "αρχείο1 υπάρχει" || echo "αρχείο1 δεν υπάρχει"
Το [και] ουσιαστικά σημαίνει το ίδιο με το τεστ.
Τώρα γνωρίζετε ότι μπορείτε να βελτιώσετε τη σύγκριση των πολλαπλών συνθηκών ως εξής:
[4 -eq 4] && ["moo" = "moo"] && echo "είναι αγελάδα" || echo "δεν είναι αγελάδα"
[-ε αρχείο1.txt] || [-e αρχείο1.doc] && echo "αρχείο1 υπάρχει" || echo "αρχείο1 δεν υπάρχει"
Περίληψη
Η εντολή δοκιμής είναι πιο χρήσιμη σε δέσμες ενεργειών επειδή μπορείτε να ελέγξετε την τιμή μιας μεταβλητής έναντι μιας άλλης και να ελέγξετε τη ροή του προγράμματος. Στην τυπική γραμμή εντολών, μπορείτε να το χρησιμοποιήσετε για να ελέγξετε αν υπάρχει ένα αρχείο ή