Bash If-then-Else Παράδειγμα

Bash If Then Else Example



Σε αυτό το μάθημα, θα δούμε πώς μπορούμε να χρησιμοποιήσουμε τις δηλώσεις If-Then-Else σε σενάρια περιβάλλοντος Bash που γράφουμε. Οι δηλώσεις If-then-Else είναι ένα χρήσιμο εργαλείο για την παροχή ενός τρόπου καθορισμού της πορείας δράσης ενός σεναρίου όταν πληρούνται ορισμένες προϋποθέσεις. Ας δούμε ποια είναι η σύνταξη για τις δηλώσεις If-then-Else:

ανΜΕΡΙΚΕΣ ΕΝΤΟΛΕΣ?
τότεΤΟΤΕ-ΕΝΤΟΛΕΣ?
αλλούΑΛΛΕΣ-ΕΝΤΟΛΕΣ?
είναι

Στην παραπάνω εντολή που εμφανίζεται, εάν διαπιστωθεί ότι ορισμένες εντολές είναι αληθινές ή η κατάσταση επιστροφής του 0, τότε θα εκτελεστούν οι ΤΕΧΝΕΣ ΕΝΤΟΛΕΣ. Εάν αυτό δεν συμβαίνει, εκτελούνται οι ΑΛΛΕΣ-ΕΝΤΟΛΕΣ. Σε ΜΕΡΙΚΕΣ ΕΝΤΟΛΕΣ, κάνουμε συνήθως σύγκριση συμβολοσειράς ή σύγκριση τιμών με τη μορφή ακεραίων. Μπορούμε επίσης να κάνουμε πολλές λειτουργίες που περιλαμβάνουν αρχεία. Ας δούμε μερικά παραδείγματα πρωτογενών εντολών που χρησιμοποιούνται κυρίως όταν εργάζεστε με συνθήκες που βασίζονται σε αρχεία:







Πρωταρχικός Εννοια
[ -προς το ] Επιστρέφει true όταν υπάρχει FILE.
[-σι] Εμφανίζεται true όταν υπάρχει FILE και είναι αποκλειστικό αρχείο αποκλεισμού.
[-ντο] Επιστρέφει true όταν υπάρχει FILE & είναι ένα ειδικό αρχείο χαρακτήρων.
[-δ] Επιστρέφει true όταν υπάρχει FILE & είναι κατάλογος.
[ -Και ] Επιστρέφει true όταν υπάρχει FILE.
[-f] Επιστρέφει true όταν υπάρχει FILE & είναι κανονικό αρχείο.
[-g] Επιστρέφει true όταν υπάρχει FILE και έχει οριστεί το bit SGID.
[-η] Εμφανίζεται true όταν υπάρχει FILE & είναι ένας συμβολικός σύνδεσμος.
[-κ] Επιστρέφει true όταν υπάρχει FILE και έχει ρυθμιστεί το κολλώδες bit του.
[ -Π ] Επιστρέφει true όταν υπάρχει FILE & είναι ένας σωλήνας με όνομα (FIFO).
[-r] Επιστρέφει true όταν υπάρχει FILE & είναι αναγνώσιμο.
[-σ] Επιστρέφει true όταν υπάρχει FILE και έχει μέγεθος μεγαλύτερο από μηδέν.
[-t] Εμφανίζεται true όταν ο περιγραφέας αρχείων FD είναι ανοιχτός και αναφέρεται σε τερματικό.
[-u] Εμφανίζεται true όταν υπάρχει FILE και έχει οριστεί το bit SUID (set user ID).
[ -σε ] Επιστρέφει true όταν υπάρχει FILE & είναι εγγράψιμο.
[-Χ] Επιστρέφει true όταν υπάρχει FILE & είναι εκτελέσιμο.
[-Ο] Επιστρέφει true όταν υπάρχει FILE και ανήκει στο πραγματικό αναγνωριστικό χρήστη.
[-G] Επιστρέφει true όταν υπάρχει FILE και ανήκει στο πραγματικό αναγνωριστικό ομάδας.
[ -Ο ] Εμφανίζεται true όταν υπάρχει FILE & είναι ένας συμβολικός σύνδεσμος.
[-N] Εμφανίζεται true όταν υπάρχει FILE & έχει τροποποιηθεί από την τελευταία ανάγνωσή του.
[-S] Επιστρέφει true όταν υπάρχει FILE & είναι μια πρίζα.

Οι THEN-COMMANDS και οι ELSE-COMMANDS μπορούν να είναι οποιεσδήποτε έγκυρες λειτουργίες UNIX ή οποιοδήποτε εκτελέσιμο πρόγραμμα. Σημειώστε ότι το τότε και είναι οι εντολές χωρίζονται με ημι-άνω τελεία καθώς θεωρούνται ότι είναι εντελώς ξεχωριστά στοιχεία ενός σεναρίου.



Αν-Τότε-Άλλο Απλό Παράδειγμα

Ας ξεκινήσουμε το μάθημά μας με ένα πολύ απλό παράδειγμα με δηλώσεις If-then-Else.
Εδώ είναι ένα δείγμα προγράμματος:



Αν Παράδειγμα

Αν Παράδειγμα





Εδώ είναι η έξοδος που βλέπουμε κατά την εκτέλεση του σεναρίου μας:

$. ifelse1.sh
Οι τιμές είναι ίδιες!
$

Χρησιμοποιώντας ορίσματα γραμμής εντολών

Μπορούμε επίσης να χρησιμοποιήσουμε ορίσματα γραμμής εντολών στα σενάρια μας και να χρησιμοποιήσουμε τον αριθμό των ορισμάτων και τις ίδιες τις τιμές ως προϋπόθεση στη δήλωση IF που ορίζουμε. Αρχικά ορίζουμε ένα αρχείο κειμένου με το ακόλουθο περιεχόμενο:



Το όνομά μου είναι LinuxHint. Λατρεύω τους διακομιστές, ειδικά τους Ubuntu. Έτσι είναι
τερματισμός!

Τώρα, μπορούμε να γράψουμε ένα σενάριο το οποίο βρίσκει αν μια λέξη εμφανίζεται σε ένα αρχείο κειμένου ή όχι. Ας ορίσουμε το σενάριο τώρα:

πέταξε έξω 'Εύρεση 1 $ σε 2 $'
λαβή $ 1 $ 2
αν [ $? -γεννημένος 0 ]
τότε
πέταξε έξω 'Δεν βρέθηκε $ 1 στο αρχείο $ 2.'
αλλού
πέταξε έξω 'Βρέθηκε $ 1 στο αρχείο $ 2.'
είναι
πέταξε έξω 'Το σενάριο ολοκληρώθηκε.'

Αυτό το σενάριο είναι πολύ δυναμικό. Θεωρεί τη λέξη για εύρεση και το αρχείο για αναζήτηση από την ίδια τη γραμμή εντολών. Τώρα, είμαστε έτοιμοι να εκτελέσουμε το σενάριό μας:

Το ifelse2.sh love hello.txt

Θα δούμε μια έξοδο όπως:

Εύρεση αγάπηςσεhello.txt
η αγάπη βρέθηκεσε αρχείοhello.txt.
Το σενάριο ολοκληρώθηκε.

Έλεγχος αριθμού ορισμάτων γραμμής εντολών

Μέσα σε μια δήλωση IF, μπορούμε ακόμη να ελέγξουμε πόσα ορίσματα της γραμμής εντολών μεταβιβάστηκαν στην εντολή, έτσι ώστε να μπορούμε να ενεργήσουμε σύμφωνα με το ίδιο:

μετρώ=$ #
αν [ ! $ καταμέτρηση -gt 1 ]
τότε
πέταξε έξω «Δεν υπάρχουν αρκετά επιχειρήματα»
αλλού
πέταξε έξω 'Καλή δουλειά!'
είναι

Ας τρέξουμε τώρα αυτό το σενάριο, θα δούμε την ακόλουθη έξοδο:

Ορίσματα γραμμής εντολών

Ορίσματα γραμμής εντολών

Αν-Στη συνέχεια-Elif-Else Δηλώσεις

Μπορούμε επίσης να έχουμε πολλαπλές προτάσεις IF στο ίδιο μπλοκ για να περιορίσουμε τη διαδρομή απόφασης που παίρνει το πρόγραμμά μας για την εκτέλεση εντολών που ορίσαμε. Ακολουθεί η σύνταξη για τον ορισμό πολλαπλών προτάσεων IF στα σενάρια μας:

ανΔΟΚΙΜΗ-ΕΝΤΟΛΕΣ?
τότε
ΑΠΟΤΕΛΕΣΜΑΤΑ-ΕΝΤΟΛΕΣ?
elif
ΑΛΛΕΣ-ΕΝΤΟΛΕΣ?
τότε
ΑΛΛΑ-ΑΠΟΤΕΛΕΣΜΑΤΑ-ΕΝΤΟΛΕΣ?
αλλού
ΕΝΑΛΛΑΚΤΙΚΕΣ-ΕΝΤΟΛΕΣ?
είναι

Αυτό φαίνεται αρκετά οικείο και εύκολο να το παρακολουθήσετε επίσης. Ας ορίσουμε ένα απλό παράδειγμα για να καθορίσουμε πώς λειτουργεί το δέντρο:

μετρώ=$ #
αν [ $ καταμέτρηση -ισοδύναμο 1 ]
τότε
πέταξε έξω 'Βρέθηκε μόνο ένα επιχείρημα.'
elif [ $ καταμέτρηση -ισοδύναμο 2 ]
τότε
πέταξε έξω «Καλύτερα, βρέθηκαν δύο επιχειρήματα».
αλλού
πέταξε έξω 'Καλή δουλειά, βρέθηκαν πολλά επιχειρήματα!'
είναι

Εδώ είναι αυτό που παίρνουμε πίσω με αυτήν την εντολή:

Αν τότε Elif Else παράδειγμα

Αν τότε Elif Else παράδειγμα

Χρήση υποθέσεων υπόθεσης

Οι δηλώσεις IF-ELSE είναι χρήσιμες όταν έχετε μια μεγάλη λίστα επιλογών για τις οποίες πρέπει να αποφασίσετε. Αλλά σε περίπτωση που θέλετε να εκτελέσετε μια ενέργεια μόνο σε λίγες περιπτώσεις ακριβούς αντιστοίχισης με το αποτέλεσμα, μπορούμε να χρησιμοποιήσουμε προτάσεις CASE και σε δέσμες ενεργειών Bash. Η σύνταξή του μοιάζει με:

υπόθεσηΕΚΦΡΑΣΗσεΥΠΟΘΕΣΗ 1)ΕΝΤΟΛΕΣ ΓΙΑ ΕΚΤΕΛΕΣΗ?
ΥΠΟΘΕΣΗ 2)ΕΝΤΟΛΕΣ ΓΙΑ ΕΚΤΕΛΕΣΗ?
ΥΠΟΘΕΣΗ 2)ΕΝΤΟΛΕΣ ΓΙΑ ΕΚΤΕΛΕΣΗ?
...)ΕΝΤΟΛΕΣ ΓΙΑ ΕΚΤΕΛΕΣΗ?
*)ΕΝΤΟΛΕΣ ΓΙΑ ΕΚΤΕΛΕΣΗ?
esac

Η τελευταία περίπτωση με * λειτουργεί ως προεπιλεγμένη περίπτωση και θα εκτελεστεί όταν καμία από τις παραπάνω καθορισμένες περιπτώσεις δεν διαπιστώνεται ότι ταιριάζει.

Ας δημιουργήσουμε γρήγορα ένα απλό παράδειγμα χρησιμοποιώντας τις προτάσεις CASE:

υπόθεση '$ 1' σε
1)
πέταξε έξω 'Η τιμή είναι 1.'
;;
2)
πέταξε έξω 'Η τιμή είναι 2.'
;;
3)
πέταξε έξω 'Η τιμή είναι 3.'
;;
*)
πέταξε έξω 'Άλλη τιμή πέρασε.'
esac

Κάθε δήλωση CASE τερματίζεται από; (διπλά σημάδια ημι-κόλου). Εδώ είναι αυτό που παίρνουμε πίσω με αυτήν την εντολή:

Παράδειγμα CASE

Παράδειγμα CASE

συμπέρασμα

Σε αυτό το μάθημα, εξετάσαμε πώς μπορούμε να χρησιμοποιήσουμε τις δηλώσεις IF-ELSE, IF-THEN-ELIF και CASE στα σενάρια Bash που ορίζουμε για να πραγματοποιήσουμε συγκεκριμένες ενέργειες με βάση τις τιμές που υπάρχουν στα προγράμματά μας ή που μεταβιβάζονται από τον χρήστη χρησιμοποιώντας τη θέση Παράμετροι.