Πώς να χρησιμοποιήσετε τις συνθήκες δοκιμής μέσα σε ένα σενάριο Bash

Η εντολή δοκιμής μπορεί να χρησιμοποιηθεί στη γραμμή εντολών του Linux για να συγκρίνει ένα στοιχείο με το άλλο, αλλά χρησιμοποιείται συχνότερα σε δέσμες ενεργειών BASH ως μέρος των δηλώσεων υπό όρους που ελέγχουν τη λογική και τη ροή του προγράμματος.

Ένα βασικό παράδειγμα

Μπορείτε να δοκιμάσετε αυτές τις εντολές απλά ανοίγοντας ένα παράθυρο τερματικού .

δοκιμή 1 -eq 2 && echo "ναι" || echo "no"

Η παραπάνω εντολή μπορεί να αναλυθεί ως εξής:

Στην ουσία, η εντολή συγκρίνει 1 με 2 και ταιριάζουν με την εντολή echo "ναι" που εκτελείται, η οποία εμφανίζει "ναι" και αν δεν ταιριάζουν με την εντολή echo "no" εκτελείται η οποία εμφανίζει "no".

Συγκρίνοντας τους αριθμούς

Αν συγκρίνετε στοιχεία που αναλύονται ως αριθμοί, μπορείτε να χρησιμοποιήσετε τους ακόλουθους χειριστές σύγκρισης:

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

δοκιμή 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)

Σύγκριση κειμένου

Αν συγκρίνετε στοιχεία που αναλύονται ως συμβολοσειρές, μπορείτε να χρησιμοποιήσετε τους ακόλουθους χειριστές σύγκρισης:

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

δοκιμή "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" έχει μήκος συμβολοσειράς μεγαλύτερο από το μηδέν)

Σύγκριση αρχείων

Εάν συγκρίνετε αρχεία, μπορείτε να χρησιμοποιήσετε τους ακόλουθους χειριστές σύγκρισης:

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

test / διαδρομή / to / file1 -n / path / to / file2 & & echo "ναι"

(Εάν το αρχείο1 είναι νεότερο από το αρχείο2 τότε θα εμφανιστεί η λέξη "ναι")

test -e / path / to / file1 & & echo "ναι"

(εάν υπάρχει αρχείο1, θα εμφανιστεί η λέξη "ναι")

δοκιμή -O / διαδρομή / προς / αρχείο1 & & echo "ναι"

(αν έχετε το αρχείο1, τότε εμφανίζεται η λέξη "ναι")

Ορολογία

Συγκρίνοντας πολλαπλούς όρους

Μέχρι στιγμής όλα έχουν συγκρίνει ένα πράγμα με το άλλο αλλά τι γίνεται αν θέλετε να συγκρίνετε δύο συνθήκες.

Για παράδειγμα, αν ένα ζώο έχει 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 δεν υπάρχει"

Περίληψη

Η εντολή δοκιμής είναι πιο χρήσιμη σε δέσμες ενεργειών επειδή μπορείτε να ελέγξετε την τιμή μιας μεταβλητής έναντι μιας άλλης και να ελέγξετε τη ροή του προγράμματος. Στην τυπική γραμμή εντολών, μπορείτε να το χρησιμοποιήσετε για να ελέγξετε αν υπάρχει ένα αρχείο ή