Για αρχάριους - ας ξεκαθαρίσουμε αυτόν τον τίτλο. Το Linux έχει περισσότερα από ένα πιθανά κελύφη και η δημιουργία σεναρίων σε οποιοδήποτε από αυτά είναι ένα θέμα που μπορεί εύκολα να συσκευάσει ένα πλήρες βιβλίο. Αυτό που πρόκειται να κάνουμε είναι να καλύψουμε τα βασικά στοιχεία ενός script bash . Εάν δεν γνωρίζετε τι κέλυφος χρησιμοποιείτε, είναι πιθανώς bash . Η διαδικασία θα είναι γνωστή σε όποιον έχει δουλέψει με τα αρχεία bat του DOS, είναι ουσιαστικά η ίδια ιδέα. Απλώς βάζετε μια σειρά εντολών σε ένα αρχείο κειμένου και το τρέχετε. Η διαφορά προέρχεται από το γεγονός ότι τα scripts bash μπορούν να κάνουν πολύ περισσότερα από τα αρχεία δέσμης. Στην πραγματικότητα, το scripting bash δεν είναι τόσο μακριά από μια πλήρους γλώσσας όπως η Python. Σήμερα θα καλύψουμε μερικά βασικά στοιχεία όπως είσοδο, έξοδο, επιχειρήματα και μεταβλητές.

Σημείωση : Αν θέλουμε να γίνουμε πραγματικά τεχνικοί, το bash δεν είναι κέλυφος μόνο για Linux. Πολλά (αν και όχι όλα) από τα ακόλουθα θα ισχύουν για οποιοδήποτε σύστημα τύπου UNIX, συμπεριλαμβανομένων των Mac OSX και των BSD.

Γειά σου Κόσμε

Είναι παράδοση να ξεκινήσει μια νέα "γλώσσα", δημιουργώντας ένα απλό σενάριο για να εξάγει τις λέξεις "Hello World!". Αυτό είναι αρκετά εύκολο, απλά ανοίξτε τον αγαπημένο σας επεξεργαστή κειμένου και πληκτρολογήστε τα εξής:

 #! / bin / bash echo Γεια σας! 

Με μόνο δύο γραμμές, δεν θα μπορούσε να είναι πολύ απλούστερη, αλλά αυτή η πρώτη γραμμή, #! / Bin / bash, μπορεί να μην είναι άμεσα προφανής. Οι δύο πρώτοι χαρακτήρες (συχνά ονομάζονται hashbang) είναι ένα ειδικό σήμα. Λέει στο Linux ότι αυτή η δέσμη ενεργειών πρέπει να εκτελείται μέσω του κελύφους / bin / bash, σε αντίθεση με το κέλυφος C ή το κέλυφος Korn ή οτιδήποτε άλλο μπορεί να έχετε εγκαταστήσει. Χωρίς αυτήν, δεν υπάρχει εύκολος τρόπος για το Linux να πει ακριβώς ποιος είναι ο τύπος του script shell. Ένα σενάριο Python, για παράδειγμα, πιθανότατα θα ξεκινήσει με κάτι σαν #! / Usr / bin / python .

Μετά από αυτό είναι μόνο η echo δήλωση, η οποία εκτυπώνει τις λέξεις μετά από αυτό στο τερματικό (τεχνικά, στην τυπική έξοδο ).

Εκτέλεση του σεναρίου σας

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

 #Filename μπορεί να είναι οτιδήποτε, .sh είναι μια συνηθισμένη πρακτική για scripts κελύφους. bash myscript.sh 

Έξυπνοι αναγνώστες ίσως σκέφτονται " Αλλά περιμένετε, δεν βάλαμε το hashbang πράγμα έτσι ώστε να ξέρει να χρησιμοποιεί bash; Γιατί έπρεπε να τρέχω bash χειροκίνητα; "Και η απάντηση είναι" Δεν το κάνατε ". Τουλάχιστον, δεν θα είχατε αν είχαμε πάρει μια στιγμή για να κάνουμε το σενάριο εκτελέσιμο από μόνο του.

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

 chmod + x myscript.sh 

Και τώρα μπορεί να τρέξει με το όνομα αρχείου άμεσα.

Μεταβλητές και επιχειρήματα

Οι μεταβλητές στο bash μπορεί να είναι λίγο πιο συγκεχυμένες από κάποιες άλλες γλώσσες δέσμης ενεργειών, εν μέρει επειδή μερικές φορές πρέπει να προφέρονται με ένα χαρακτήρα $ και μερικές φορές όχι - ανάλογα με το τι κάνετε. Ακολουθήστε το ακόλουθο παράδειγμα.

 PATH = $ PATH: / home / josh / scripts 

Αναφερόμαστε στην ίδια μεταβλητή, PATH, δύο φορές. Μόλις δεν υπάρχει $, αλλά την άλλη φορά υπάρχει. Υπάρχουν μερικοί τρόποι που μπορείτε να θυμηθείτε πότε ένα $ είναι κατάλληλο, αλλά αυτός ο συγγραφέας χρησιμοποιεί μια "ομιλία" μεταφορά. Αν μιλάω για τη μεταβλητή (όπως την εκχώρηση μιας νέας τιμής) την αποκαλώ με το σύντομο όνομα, στην περίπτωση αυτή PATH. Αν μιλάω για μια μεταβλητή (όπως η λήψη της τρέχουσας αξίας της) παίρνει έναν πιο επίσημο τίτλο ($ PATH). Η ακριβής συλλογιστική και οι εσωτερικές λειτουργίες αυτού του σχεδιασμού είναι πέρα ​​από το πεδίο εφαρμογής αυτού του οδηγού, οπότε απλά προσπαθήστε να θυμηθείτε ότι πρέπει να συμπεριλάβετε ένα $ αν προσπαθείτε να μεταφέρετε τις πληροφορίες σε μια μεταβλητή.

Τώρα πρόκειται να χρησιμοποιήσουμε μια μεταβλητή στη γραφή μας. Αλλαγή της δεύτερης γραμμής για να μοιάσετε με τα παρακάτω:

 #! / bin / bash echo Γεια σου $ 1! 

Και ξαναρχίστε το σενάριο σας, αλλά αυτή τη φορά συμπεριλάβετε το όνομά σας μετά το όνομα του σεναρίου.

Το Bash αυτόματα εκχωρεί ορισμένες μεταβλητές για εσάς, συμπεριλαμβανομένων μερικών, όπως $ 1, $ 2 κτλ που περιέχουν κάθε ένα από τα επιχειρήματα που μεταβιβάζονται στο σενάριο. Οι μεταβλητές μπορούν να ανακατανεμηθούν και να μετονομαστούν με οποιοδήποτε τρόπο επιθυμείτε, ώστε να μπορείτε να ξαναγράψετε το προηγούμενο σενάριο ως

 #! / bin / bash πρώτο όνομα = $ 1 όνομα = $ 2 echo Γεια σας $ firstname $ lastname! 

Όπως μπορείτε να δείτε, δεν υπάρχουν σημάδια $ κατά την εκχώρηση της τιμής στη μεταβλητή, αλλά τα χρειάζεστε όταν τραβάτε τις πληροφορίες έξω.

Συνθήκες και βρόχους

Κανένα σενάριο δεν θα μπορούσε να πάρει πολύ μακριά χωρίς τη δυνατότητα να αναλύσει ή να βρει δεδομένα. Η πιο συνηθισμένη μέθοδος καθορισμού μιας πορείας δράσης είναι να χρησιμοποιήσετε τη δήλωση if. Λειτουργεί σαν να περιμένατε - ΕΑΝ ΑΚΟΜΑ ΠΟΤΕ τα πράγματα ELSE κάνουν κάτι διαφορετικό. Αυτό το παράδειγμα συγκρίνει τη συμβολοσειρά των χαρακτήρων που αποθηκεύσαμε στη μεταβλητή firstname και το συγκρίνει με κάποιο κείμενο με κωδικό. Εάν ταιριάζουν, εκτυπώνει ειδική έξοδο. Διαφορετικά, συνεχίζει κανονικά.

 #! / bin / bash firstname = $ 1 όνομα = $ 2 αν ["$ firstname" == "Josh"] τότε echo "Τι υπέροχο όνομα" άλλο echo Γεια σου $ firstname $ lastname! fi 

Τέλος, η επόμενη βασική συνιστώσα είναι η ικανότητα του bash να βγάζει δεδομένα. Οι κανονικοί μηχανισμοί βρόχου για bash είναι FOR, WHILE, και UNTIL. Θα ξεκινήσουμε με, ενώ είναι το πιο απλό.

 #! / bin / counter count = 0 # Όσο ο μετρητής είναι μικρότερος από 10, διατηρήστε το βρόχο ενώ το [$ counter -lt 50]? κάνουμε echo $ counter αφήνουμε counter = counter + 1 done 

Αυτό το παράδειγμα δημιουργεί μια μεταβλητή μεταβλητή, ξεκινά ένα βρόχο while και συνεχίζει το βρόχο (και προσθέτοντας ένα στον μετρητή) μέχρι να φτάσει το όριο, στην περίπτωση αυτή 50. Οτιδήποτε μετά την εκτέλεση θα εκτελεστεί μόλις ολοκληρωθεί ο βρόχος.

ΕΝΩ λειτουργεί όμοια, αλλά ως αντίστροφη της WHILE. Ο κύκλος while θα συνεχιστεί όσο η έκφρασή του είναι αληθής (μετρητής μικρότερος από 50). Ο βρόχος μέχρι έχει την αντίθετη προσέγγιση και θα γράφεται ως

 μέχρι [$ counter -gt 50]. κάνω 

Σε αυτό το παράδειγμα, "ενώ λιγότερο από 50" και "μέχρι πάνω από 50" θα έχουν σχεδόν ταυτόσημα αποτελέσματα (η διαφορά είναι ότι θα συμπεριληφθεί ο ίδιος ο αριθμός 50 και ο άλλος όχι.) Δοκιμάστε τον για να δείτε ποιος, και γιατί.)

συμπέρασμα

Όπως αναφέρθηκε παραπάνω, θα χρειαζόταν πολύ περισσότερα από ένα άρθρο για να ξεκινήσει πλήρως να καταδείξει τη δύναμη του scripting bash. Τα κομμάτια που εμφανίζονται εδώ μπορούν να θεωρηθούν ως τα βασικά συστατικά του πως λειτουργεί το bash και θα πρέπει να αρκούν για να σας δείξουν τις βασικές αρχές πίσω από το script shell στο Linux. Αν θέλετε πραγματικά να μπείτε στα κότσια και να αρχίσετε να δημιουργείτε μερικά εξαιρετικά σενάρια, ανατρέξτε στον επίσημο οδηγό αναφοράς του GNU εδώ. Happy scripting!