Ο οδηγός για αρχάριους για Shell Scripting 4 Συνθήκες & Εάν-Τότε Δηλώσεις
Καλύψαμε αρκετά από τα βασικά στοιχεία του οδηγού μας σχετικά με το script shell που θα πρέπει να αισθάνεστε άνετα να πειραματιστείτε. Σε αυτή την εβδομάδα, θα αντιμετωπίσουμε μερικά από τα πιο διασκεδαστικά πράγματα, όπως είναι οι συνθήκες και οι "if-then" δηλώσεις.
Ποιες είναι οι συνθήκες?
Στην καθημερινή γλώσσα, λέμε ότι οι συνθήκες είναι απαιτήσεις που πρέπει να πληρούνται για να συμβεί κάτι. Για να μπορέσω να συνδέσω το φορητό υπολογιστή μου στο Διαδίκτυο, υπάρχουν αρκετές προϋποθέσεις που πρέπει να πληρούνται, όπως το να έχει κάποιος ISP, το μόντεμ ή / και ο δρομολογητής που βρίσκεται, ο φορητός υπολογιστής μου να είναι κτλ. Είναι πολύ απλό και αν υπάρχει των απαιτήσεων αυτών δεν ικανοποιούνται, το αποτέλεσμα - ο φορητός μου υπολογιστής που συνδέεται με το Διαδίκτυο - δεν συμβαίνει.
Οι συνθήκες στον τομέα της πληροφορικής λειτουργούν ομοίως. Μπορούμε να ελέγξουμε αν μια συμβολοσειρά αντιστοιχεί σε μια άλλη συμβολοσειρά, αν δεν ταιριάζει με μια άλλη συμβολοσειρά ή ακόμα και αν υπάρχει. Ομοίως, μπορούμε να δοκιμάσουμε αριθμητικά επιχειρήματα για να διαπιστώσουμε αν κάποιος είναι μεγάλος από, μικρότερος ή ίσος με άλλον. Για να γίνει κάτι να συμβεί μετά την ικανοποίηση των προϋποθέσεων της δοκιμής, χρησιμοποιούμε τις δηλώσεις if-then. Η μορφή τους είναι πολύ απλή.
αν CONDITION
έπειτα
command1
command2
...
commandn
fi
Εάν δηλώσεις
Ας τρέξουμε ένα σύντομο σύντομο σενάριο δοκιμής, θα το κάνουμε?
αν δοκιμάσετε $ 1 -gt $ 2
έπειτα
echo "$ 1 είναι μεγαλύτερο από $ 2"
fi
Θα παρατηρήσετε ότι μόνο όταν η προϋπόθεση αυτή είναι αληθής, το σενάριο θα εκτελέσει την ακόλουθη εντολή. Διαφορετικά, η δήλωση "if" θα εξέλθει. Εάν υπάρχουν εντολές μετά τη δήλωση "if", τότε θα εκτελούνται κανονικά. Προσθέτω την ακόλουθη γραμμή στο τέλος της παραπάνω δέσμης ενεργειών για να το δείξω αυτό:
echo "Αυτό έρχεται μετά από την εντολή if"
Ακολουθούν μερικοί άλλοι αριθμητικοί χειριστές που ίσως θέλετε να δοκιμάσετε:
- -eq: ίσο με
- -ne: δεν ισούται με
- -lt: λιγότερο από
- -le: μικρότερη ή ίση με
- -gt: μεγαλύτερη από
- -ge: μεγαλύτερη ή ίση με
Δοκιμές χορδών
Τώρα, αν τροποποιήσουμε την πρώτη γραμμή του σεναρίου μας για να είναι αυτό:
εάν δοκιμή $ 1 = $ 2
τότε η κατάσταση θα δοκιμάσει αν τα δύο είναι ίσα. Υπάρχει εδώ μια παγίδα !! Η χρήση ενός σημείου ισότητας (=) συγκρίνει δύο συμβολοσειρές και όχι αριθμούς. Εάν θέλετε να συγκρίνετε τους αριθμούς, θα πρέπει να χρησιμοποιήσετε τον τελεστή "-eq" παρόμοια με τον τρόπο που χρησιμοποιήσαμε "-gt" παραπάνω.
Τώρα, ας κάνουμε μια άλλη τροποποίηση:
αν δοκιμάσετε $ 1! = $ 2
Η συμπερίληψη του θαυματουργού (!) Ενεργεί ως τροποποιητής "όχι". Δηλαδή, εκτελεί μόνο την ακόλουθη εντολή όταν οι δύο συμβολοσειρές δεν ταιριάζουν.
Ακολουθεί μια λίστα με μερικές δοκιμές που βασίζονται σε συμβολοσειρές που μπορείτε να χρησιμοποιήσετε:
- string: χρησιμοποιώντας μόνο ένα όρισμα από μόνο του ελέγχει αν η συμβολοσειρά δεν είναι κενή (null) ή δεν ορίζεται με κάποιο τρόπο
- -n string: αυτό θα ελέγξει εάν η συμβολοσειρά δεν είναι κενή και έχει οριστεί
- -z συμβολοσειρά: αυτό θα ελέγξει εάν η συμβολοσειρά είναι κενή και ορίζεται με αυτόν τον τρόπο
Τι άλλο για το Αν?
Θα παραδεχτώ ότι ο τίτλος του τμήματος ήταν σίγουρα κακό. Εντάξει, γνωρίζουμε πώς να εκτελέσουμε μια εντολή εάν μια δοκιμή είναι αληθής, αλλά τι γίνεται αν θέλουμε να εκτελέσουμε μια διαφορετική εντολή αν είναι ψευδής; Μπορούμε εύκολα να βάλουμε τα δύο μαζί προσθέτοντας μια ενότητα στις "if-then" δηλώσεις μας - ένα "άλλο"!
αν CONDITION
έπειτα
command1
command2
...
commandn
αλλού
command1
command2
...
commandn
fi
Ας δούμε ένα απλό σενάριο.
Υπάρχουν τα πάντα με την κατάλληλη εσοχή. Εάν κοιτάξετε προσεκτικά, θα παρατηρήσετε ότι χρησιμοποιήσαμε αγκύλες ([και]) αντί για την εντολή δοκιμής. Είναι λειτουργικά ισοδύναμοι για τους σκοπούς μας και είναι πολύ πιθανότερο να δείτε τις αγκύλες για διάφορους λόγους, επομένως θα τις χρησιμοποιήσουμε από τώρα και στο εξής.
Ακολουθεί η εμφάνιση της παραγωγής:
Είναι τόσο εύκολο!
Τι κάνω τώρα?
Τώρα που ξέρετε πώς να χρησιμοποιήσετε τις δηλώσεις if-then-else, μπορείτε να εκτελέσετε δέσμες ενεργειών που μπορούν να εκτελέσουν δοκιμές. Για παράδειγμα, μπορείτε να εκτελέσετε μια δέσμη ενεργειών που θα υπολογίσει ένα md5 hash ενός αρχείου και στη συνέχεια να το συγκρίνει με αυτό που έχετε κατεβάσει σε ένα αρχείο για να δείτε αν ταιριάζει.
Για ορισμένα σημεία μπόνους, μπορείτε να δημιουργήσετε ένα σενάριο που έχει έναν "για" βρόχο, αλλά χρησιμοποιεί τις συνθήκες δοκιμής αντί να διαβάζει γραμμές από ένα αρχείο λίστας ...
Παίρνουμε μερικά από τα πιο ενδιαφέροντα μέρη του Οδηγού μας για το Shell Scripting. Εάν χάσατε τα προηγούμενα μαθήματα, μπορείτε να δείτε μια γρήγορη λίστα για να δείτε:
- Τα βασικά της Shell Scripting
- Χρησιμοποιώντας Για βρόχους
- Περισσότερες βασικές εντολές
- Ποιες είναι οι διαφορές μεταξύ των κελυφών του Linux?
- Πώς να χρησιμοποιήσετε τις βασικές κανονικές εκφράσεις
Εάν έχετε δημιουργήσει ή χρησιμοποιήσει δέσμες ενεργειών που χρησιμοποιούν συνθήκες δοκιμής, if-then-else και βρόχους "για", μοιραστείτε μαζί μας στα σχόλια!