23Aug
Ο όρος "shell scripting" αναφέρεται συχνά σε φόρουμ Linux, αλλά πολλοί χρήστες δεν είναι εξοικειωμένοι με αυτό.Η εκμάθηση αυτής της εύκολης και ισχυρής μεθόδου προγραμματισμού μπορεί να σας βοηθήσει να εξοικονομήσετε χρόνο, να μάθετε καλύτερα τη γραμμή εντολών και να απαλλαγείτε από τις επίπονες εργασίες διαχείρισης αρχείων.
Τι είναι το Shell Scripting;
Ο χρήστης του Linux σημαίνει ότι παίζετε με τη γραμμή εντολών.Όπως αυτό ή όχι, υπάρχουν μόνο μερικά πράγματα που γίνονται πολύ πιο εύκολα μέσω αυτής της διασύνδεσης παρά με τοποθέτηση και κλικ.Όσο περισσότερο χρησιμοποιείτε και μαθαίνετε την γραμμή εντολών, τόσο περισσότερο βλέπετε τις δυνατότητές της.Λοιπόν, η ίδια η γραμμή εντολών είναι ένα πρόγραμμα: το κέλυφος.Οι περισσότεροι διανομείς Linux χρησιμοποιούν σήμερα Bash, και αυτό είναι που εισάγετε εντολές.
Τώρα, ορισμένοι από εσάς που χρησιμοποιούσατε τα Windows πριν χρησιμοποιήσετε το Linux ενδέχεται να θυμούνται τα αρχεία δέσμης.Αυτά ήταν μικρά αρχεία κειμένου που θα μπορούσατε να συμπληρώσετε με εντολές για εκτέλεση και τα Windows θα τα χρησιμοποιούσαν με τη σειρά τους.Ήταν ένας έξυπνος και τακτοποιημένος τρόπος για να κάνετε κάποια πράγματα, όπως τα παιχνίδια στο εργαστήριο υπολογιστών του γυμνασίου όταν δεν μπορείτε να ανοίξετε φακέλους συστήματος ή να δημιουργήσετε συντομεύσεις.Τα αρχεία παρτίδων στα Windows, ενώ είναι χρήσιμα, είναι μια φτηνή απομίμηση σεναρίων κελύφους.
Τα σενάρια Shell μας επιτρέπουν να προγραμματίζουμε εντολές σε αλυσίδες και το σύστημα να τις εκτελεί ως ένα σελιδοποιημένο συμβάν, ακριβώς όπως τα αρχεία δέσμης.Επιτρέπουν επίσης πολύ πιο χρήσιμες λειτουργίες, όπως η αντικατάσταση των εντολών.Μπορείτε να καλέσετε μια εντολή, όπως την ημερομηνία, και να χρησιμοποιήσετε την έξοδο της ως μέρος ενός σχεδίου ονοματοδοσίας αρχείων.Μπορείτε να αυτοματοποιήσετε τα αντίγραφα ασφαλείας και κάθε αρχείο αντιγραφής μπορεί να έχει την τρέχουσα ημερομηνία προσαρτημένη στο τέλος του ονόματος.Τα scripts δεν είναι απλώς επικλήσεις εντολών.Είναι προγράμματα από μόνα τους.Η δέσμη ενεργειών σάς επιτρέπει να χρησιμοποιείτε λειτουργίες προγραμματισμού - όπως βρόχους 'για', αν οι παράμετροι /then/ else κ.λπ. - απευθείας στο περιβάλλον εργασίας του λειτουργικού σας συστήματος.Και, δεν χρειάζεται να μάθετε άλλη γλώσσα γιατί χρησιμοποιείτε αυτό που γνωρίζετε ήδη: η γραμμή εντολών.
Αυτό είναι πραγματικά η δύναμη της δέσμης ενεργειών, νομίζω.Μπορείτε να προγραμματίσετε με εντολές που ήδη γνωρίζετε, ενώ μαθαίνετε συρραπτικά από τις περισσότερες σημαντικές γλώσσες προγραμματισμού.Πρέπει να κάνετε κάτι επαναλαμβανόμενο και κουραστικό;Σενάρι!Χρειάζεστε μια συντόμευση για μια πραγματικά περίπλοκη εντολή;Σενάρι!Θέλετε να δημιουργήσετε μια πραγματικά εύχρηστη διεπαφή γραμμής εντολών για κάτι;Σενάρι!
Πριν ξεκινήσετε
Πριν αρχίσουμε τη σειρά σεναρίων, ας καλύψουμε κάποιες βασικές πληροφορίες.Θα χρησιμοποιήσουμε το κέλυφος bash, το οποίο χρησιμοποιούν οι περισσότερες διανομές Linux.Το Bash είναι διαθέσιμο για χρήστες Mac OS και Cygwin για Windows.Δεδομένου ότι είναι τόσο καθολική, θα πρέπει να είστε σε θέση να script ανεξάρτητα από την πλατφόρμα σας.Επιπλέον, εφ 'όσον υπάρχουν όλες οι εντολές που αναφέρονται, τα σενάρια μπορούν να λειτουργούν σε πολλαπλές πλατφόρμες με ελάχιστη απαίτηση χωρίς μικροαλλαγές.Το
Scripting μπορεί εύκολα να κάνει χρήση προνομίων "administrator" ή "superuser", οπότε είναι καλύτερο να δοκιμάσετε σενάρια πριν τα βάλετε σε λειτουργία.Χρησιμοποιήστε επίσης κοινή λογική, όπως να βεβαιωθείτε ότι έχετε δημιουργήσει αντίγραφα ασφαλείας των αρχείων στα οποία πρόκειται να εκτελέσετε μια δέσμη ενεργειών.Είναι επίσης πολύ σημαντικό να χρησιμοποιήσετε τις σωστές επιλογές, όπως -i για την εντολή rm, έτσι ώστε να απαιτείται η αλληλεπίδρασή σας.Αυτό μπορεί να αποτρέψει κάποια δυσάρεστα λάθη.Ως εκ τούτου, διαβάστε τα σενάρια που κατεβάζετε και να είστε προσεκτικοί με τα δεδομένα που έχετε, μόνο σε περίπτωση που τα πράγματα πάνε στραβά.
Στον πυρήνα τους, τα σενάρια είναι απλά αρχεία κειμένου.Μπορείτε να χρησιμοποιήσετε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου για να τα γράψετε: gedit, emacs, vim, nano. .. Αυτή η λίστα συνεχίζεται.Απλά φροντίστε να το αποθηκεύσετε ως απλό κείμενο, όχι ως πλούσιο κείμενο ή ένα έγγραφο του Word.Δεδομένου ότι μου αρέσει η ευκολία χρήσης που παρέχει το nano, θα το χρησιμοποιώ.
Δικαιώματα και ονόματα δέσμης ενεργειών
Τα scripts εκτελούνται όπως τα προγράμματα και για να συμβεί αυτό πρέπει να έχουν τα κατάλληλα δικαιώματα.Μπορείτε να εκτελέσετε τα scripts εκτελέσιμα ακολουθώντας την ακόλουθη εντολή:
chmod + x ~ /somecrazyfolder/ script1
Αυτό θα επιτρέψει σε οποιονδήποτε να τρέξει το συγκεκριμένο σενάριο.Αν θέλετε να περιορίσετε τη χρήση του σε απλώς τον χρήστη σας, μπορείτε να χρησιμοποιήσετε αυτό το
chmod u + x ~ /somecrazyfolder/ script1
Για να εκτελέσετε αυτή τη δέσμη ενεργειών, θα πρέπει να κάνετε cd στον κατάλληλο κατάλογο και στη συνέχεια να εκτελέσετε το σενάριο σαν αυτό:
cd ~ / somecrazyfolder
. /script1
Για να κάνετε τα πράγματα πιο βολικά, μπορείτε να τοποθετήσετε σενάρια σε ένα φάκελο "bin" στον οικείο κατάλογό σας:
~ / bin
Σε πολλές σύγχρονες διανομές, ο φάκελος αυτός δεν δημιουργείται πλέον από προεπιλογή, αλλά μπορείτε να τον δημιουργήσετε.Αυτό είναι συνήθως όπου τα εκτελέσιμα αρχεία αποθηκεύονται που ανήκουν στον χρήστη σας και όχι σε άλλους χρήστες.Με την τοποθέτηση σεναρίων εδώ, μπορείτε απλά να τα εκτελέσετε πληκτρολογώντας το όνομά τους, όπως και άλλες εντολές, αντί να πρέπει να κάνετε cd και να χρησιμοποιήσετε το πρόθεμα './'.
Πριν να ονομάσετε μια δέσμη ενεργειών, θα πρέπει να ακολουθήσετε την ακόλουθη εντολή για να ελέγξετε αν έχετε εγκαταστήσει ένα πρόγραμμα που χρησιμοποιεί αυτό το όνομα:
που [εντολή]
Πολλοί άνθρωποι ονομάζουν τα πρώτα τους "δοκιμαστικά" σενάρια και όταν προσπαθούννα το εκτελέσετε στη γραμμή εντολών, δεν συμβαίνει τίποτα.Αυτό οφείλεται στο ότι έρχεται σε σύγκρουση με την εντολή δοκιμής, η οποία δεν κάνει τίποτα χωρίς επιχειρήματα.Πάντα να είστε σίγουροι ότι τα ονόματα των σεναρίων σας δεν έρχονται σε αντίθεση με τις εντολές, διαφορετικά μπορεί να βρεθείτε να κάνετε πράγματα που δεν σκοπεύετε να κάνετε!
Οδηγίες Scripting
Όπως ανέφερα προηγουμένως, κάθε αρχείο δέσμης ενεργειών είναι ουσιαστικά απλό κείμενο.Αυτό δεν σημαίνει ότι μπορείτε να γράψετε ό, τι θέλετε όλοι willy-nilly, όμως.Όταν επιχειρείται εκτέλεση ενός αρχείου κειμένου, τα κελύφια θα εξετάσουν μέσω αυτών για ενδείξεις ως προς το αν πρόκειται για δέσμες ενεργειών ή όχι και για το πώς να χειριστούν όλα σωστά.Εξαιτίας αυτού, υπάρχουν μερικές οδηγίες που πρέπει να γνωρίζετε.
- Κάθε σενάριο πρέπει να είναι με "#!
- Κάθε
- είναι μια νέα εντολή
- Οι γραμμές γραμμής ξεκινούν με μια #
- Οι εντολές περιβάλλονται από()
Το Hash-Bang Hack
Όταν ένα κέλυφος αναλύει ένα αρχείο κειμένου, ο πιο άμεσος τρόπος για τον προσδιορισμό του αρχείου ωςένα σενάριο είναι κάνοντας την πρώτη γραμμή σας:
#!/bin/ bash
Εάν χρησιμοποιείτε άλλο κέλυφος, αντικαταστήστε την διαδρομή του εδώ.Οι γραμμές γραμμής ξεκινούν με χασάρια( #), αλλά προσθέτουν την έκρηξη( !) Και την διαδρομή του κελύφους αφού είναι ένα είδος hack που θα παρακάμψει αυτόν τον κανόνα σχολίου και θα αναγκάσει το σενάριο να εκτελεστεί με το κέλυφος που δείχνει αυτή η γραμμή.
Νέα Γραμμή = Νέα Εντολή
Κάθε νέα γραμμή θα πρέπει να θεωρείται νέα εντολή ή συστατικό ενός μεγαλύτερου συστήματος.Αν άλλες δηλώσεις /then/, για παράδειγμα, θα πάρουν πολλές γραμμές, αλλά κάθε στοιχείο αυτού του συστήματος βρίσκεται σε μια νέα γραμμή.Μην αφήσετε μια εντολή να αιμορραγεί στην επόμενη γραμμή, καθώς αυτό μπορεί να περικόψει την προηγούμενη εντολή και να σας δώσει ένα σφάλμα στην επόμενη γραμμή.Εάν ο επεξεργαστής κειμένων σας το κάνει αυτό, θα πρέπει να απενεργοποιήσετε την περιτύλιξη κειμένου για να είστε στην ασφαλή πλευρά.Μπορείτε να απενεργοποιήσετε την περιτύλιξη κειμένου σε nano bit πατώντας ALT + L.
Σχόλιο Συχνά με #s
Αν ξεκινήσετε μια γραμμή με #, η γραμμή αγνοείται.Αυτό το μετατρέπει σε γραμμή σχολίων, όπου μπορείτε να θυμηθείτε ποια ήταν η έξοδος της προηγούμενης εντολής ή τι θα κάνει η επόμενη εντολή.Και πάλι, απενεργοποιήστε την περιτύλιξη κειμένου ή σπάστε το σχόλιό σας σε πολλές γραμμές που ξεκινούν με ένα hash.Η χρήση πολλών σχολίων είναι μια καλή πρακτική για να κρατήσετε, καθώς σας επιτρέπει και άλλους ανθρώπους να τροποποιήσετε τα σενάρια σας πιο εύκολα.Η μόνη εξαίρεση είναι η προαναφερθείσα Hash-Bang hack, οπότε μην ακολουθήσετε #s με! S.;-) Οι εντολές
περιβάλλονται από τις παρενθέσεις
Στις παλιότερες ημέρες, οι αντικαταστάσεις εντολών έγιναν με σημάδια μόνο( `, μοιράζεται το κλειδί ~).Δεν πρόκειται να το αγγίξουμε ακόμα, αλλά καθώς οι περισσότεροι άνθρωποι πηγαίνουν μακριά και εξερευνούν μετά από να μάθουν τα βασικά, είναι πιθανώς μια καλή ιδέα να αναφέρω ότι θα πρέπει να χρησιμοποιήσετε παρενθέσεις αντ 'αυτού.Αυτό συμβαίνει κυρίως επειδή όταν φωλιάζετε - τοποθετείτε εντολές μέσα σε άλλες εντολές - οι παρενθέσεις λειτουργούν καλύτερα.
Το πρώτο σας script
Ας ξεκινήσουμε με ένα απλό script που σας επιτρέπει να αντιγράφετε αρχεία και να προσθέτετε ημερομηνίες στο τέλος του ονόματος αρχείου.Ας το ονομάσουμε "datecp".Πρώτον, ας ελέγξουμε αν το όνομα αυτό έρχεται σε σύγκρουση με κάτι:
Μπορείτε να δείτε ότι δεν υπάρχει έξοδος από την οποία εντολή, οπότε όλοι θέλουμε να χρησιμοποιήσουμε αυτό το όνομα.
Ας δημιουργήσουμε ένα κενό αρχείο στο φάκελο ~ / bin:
αγγίξτε ~ /bin/ datecp
Και, ας αλλάξουμε την άδεια τώρα, προτού ξεχάσουμε:
Ας αρχίσουμε να δημιουργούμε το σενάριό μας στη συνέχεια.Ανοίξτε αυτό το αρχείο στον επεξεργαστή κειμένου που επιθυμείτε.Όπως είπα, μου αρέσει η απλότητα του νανο.
nano ~ /bin/ datecp
Και, ας πάμε μπροστά και βάλουμε την προϋπόθεση πρώτη γραμμή, και ένα σχόλιο για το τι κάνει αυτό το σενάριο.
Στη συνέχεια, ας δηλώσουμε μια μεταβλητή.Αν έχετε πάρει ποτέ άλγεβρα, ίσως ξέρεις τι είναι αυτό.Μια μεταβλητή μας επιτρέπει να αποθηκεύουμε πληροφορίες και να κάνουμε πράγματα μαζί της.Οι μεταβλητές μπορούν να "επεκταθούν" όταν αναφέρονται σε άλλο σημείο.Δηλαδή, αντί να εμφανίζεται το όνομά τους, θα εμφανίζουν το αποθηκευμένο περιεχόμενο τους.Μπορείτε αργότερα να ενημερώσετε την ίδια μεταβλητή για την αποθήκευση διαφορετικών πληροφοριών και οποιαδήποτε εντολή που θα εμφανιστεί μετά θα χρησιμοποιήσει τις νέες πληροφορίες.Είναι ένα πολύ φανταστικό σύμβολο κράτησης θέσης.
Τι θα βάλουμε σε μεταβλητή;Λοιπόν, ας αποθηκεύσουμε την ημερομηνία και την ώρα!Για να γίνει αυτό, θα καλέσουμε την εντολή ημερομηνίας.
Ρίξτε μια ματιά στο παρακάτω στιγμιότυπο οθόνης για τον τρόπο κατασκευής της εξόδου της εντολής ημερομηνίας:
Μπορείτε να δείτε ότι προσθέτοντας διαφορετικές μεταβλητές που ξεκινούν από το%, μπορείτε να αλλάξετε την έξοδο της εντολής σε αυτό που θέλετε.Για περισσότερες πληροφορίες, μπορείτε να δείτε τη σελίδα με το εγχειρίδιο για την εντολή ημερομηνίας.
Ας χρησιμοποιήσουμε αυτή την τελευταία επανάληψη της εντολής ημερομηνίας, "ημερομηνία +% m_% d_% y-% H.% M.% S" και χρησιμοποιήστε αυτήν στη δέσμη ενεργειών μας.
Εάν επρόκειτο να αποθηκεύσουμε αυτό το σενάριο αυτή τη στιγμή, θα μπορούσαμε να το εκτελέσουμε και θα μας έδινε την έξοδο της εντολής ημερομηνίας όπως θα περίμενε κανείς:
Αλλά, ας κάνουμε κάτι διαφορετικό.Ας δώσουμε ένα μεταβλητό όνομα, όπως date_formatted σε αυτήν την εντολή.Η σωστή σύνταξη για αυτό είναι η ακόλουθη:
variable = $( εντολή - arguments arguments)
Και για εμάς θα το χτίσαμε έτσι:
date_formatted = $( ημερομηνία +% m_% d_% y-% H.%M.% S)
Αυτό καλούμε την υποκατάσταση εντολής.Είμαστε ουσιαστικά λέει bash ότι κάθε φορά που εμφανίζεται η μεταβλητή "date_formatted", για να εκτελέσετε την εντολή μέσα στις παρενθέσεις.Στη συνέχεια, ανεξάρτητα από την έξοδο που δίνουν οι εντολές, πρέπει να εμφανίζεται αντί για το όνομα της μεταβλητής, "date_formatted".
Ακολουθεί ένα παράδειγμα σεναρίου και η έξοδος του:
Σημειώστε ότι υπάρχουν δύο κενά στην έξοδο.Ο χώρος μέσα στα εισαγωγικά της εντολής ηχώ και ο χώρος μπροστά από τη μεταβλητή εμφανίζονται και τα δύο.Μην χρησιμοποιείτε χώρους εάν δεν θέλετε να εμφανίζονται.Επίσης, σημειώστε ότι χωρίς αυτή την προστιθέμενη γραμμή "echo", το σενάριο δεν θα έδινε απολύτως κανένα αποτέλεσμα.
Ας επιστρέψουμε στο σενάριό μας.Ας προσθέσουμε το επόμενο κομμάτι της εντολής.
cp -iv $ 1 $ 2. $ date_formatted
Αυτό θα καλέσει την εντολή copy, με τις επιλογές -i και -v.Ο πρώτος θα σας ζητήσει επαλήθευση πριν από την αντικατάσταση ενός αρχείου και ο τελευταίος θα εμφανίσει αυτό που βρίσκεται κάτω στη γραμμή εντολών.
Στη συνέχεια, μπορείτε να δείτε ότι έχω προσθέσει την επιλογή "$ 1".Κατά τη δημιουργία σεναρίων, ένα σύμβολο του δολαρίου( $) που ακολουθείται από έναν αριθμό θα υποδηλώνει αυτό το αριθμημένο όρισμα του σεναρίου όταν κλήθηκε.Για παράδειγμα, στην ακόλουθη εντολή:
cp -iv Trogdor2.mp3 ringtone.mp3
Το πρώτο επιχείρημα είναι "Trogdor2.mp3" και το δεύτερο είναι "ringtone.mp3".
Κοιτάζοντας πίσω στη δέσμη ενεργειών μας, μπορούμε να δούμε ότι αναφερόμαστε σε δύο επιχειρήματα:
Αυτό σημαίνει ότι όταν εκτελούμε τη δέσμη ενεργειών, θα χρειαστεί να δώσουμε δύο επιχειρήματα για τη σωστή εκτέλεση του σεναρίου.Το πρώτο όρισμα, $ 1, είναι το αρχείο που θα αντιγραφεί και αντικαθίσταται ως το πρώτο όρισμα της εντολής "cp -iv".
Το δεύτερο επιχείρημα, $ 2, θα λειτουργήσει ως αρχείο εξόδου για την ίδια εντολή.Αλλά, μπορείτε επίσης να δείτε ότι είναι διαφορετικό.Έχουμε προσθέσει μια περίοδο και έχουμε αναφερθεί από τη παραπάνω μεταβλητή "date_formatted".Περίεργος για το τι κάνει αυτό;
Ακολουθεί τι συμβαίνει όταν εκτελείται η δέσμη ενεργειών:
Μπορείτε να δείτε ότι το αρχείο εξόδου παρατίθεται ως ό, τι εισάγαμε για $ 2, ακολουθούμενο από μια περίοδο, στη συνέχεια την έξοδο της εντολής ημερομηνίας!Έχει νόημα, έτσι;
Τώρα όταν τρέχω την εντολή datecp, θα τρέξει αυτή τη δέσμη ενεργειών και θα μου επιτρέψει να αντιγράψω οποιοδήποτε αρχείο σε μια νέα θέση και να προσθέσω αυτόματα την ημερομηνία και την ώρα στο τέλος του ονόματος αρχείου.Χρήσιμο για την αρχειοθέτηση του υλικού!Το
Shell scripting είναι στο επίκεντρο του να δουλεύει το OS σας για εσάς.Δεν χρειάζεται να μάθετε μια νέα γλώσσα προγραμματισμού για να συμβεί αυτό.Δοκιμάστε να κάνετε scripting με κάποιες βασικές εντολές στο σπίτι και να αρχίσετε να σκέφτεστε τι μπορείτε να χρησιμοποιήσετε για αυτό.
Σενάρεις;Έχετε κάποια συμβουλή για αρχάριους;Μοιραστείτε τις σκέψεις σας στα σχόλια!Υπάρχουν πολλά να έρθουν σε αυτή τη σειρά!