Ο οδηγός για αρχάριους για το Shell Scripting: Τα βασικά

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

Τι είναι το Shell Scripting;

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

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

Τα σενάρια Shell μας επιτρέπουν να προγραμματίζουμε εντολές σε αλυσίδες και να το εκτελούμε το σύστημα ως συμβάν σεναρίου, όπως και τα αρχεία δέσμης. Επιτρέπουν επίσης πολύ πιο χρήσιμες λειτουργίες, όπως η αντικατάσταση εντολών. Μπορείτε να καλέσετε μια εντολή, όπως ημερομηνία, και να χρησιμοποιήσετε την έξοδο ως μέρος ενός σχήματος ονομάτων αρχείων. Μπορείτε να αυτοματοποιήσετε τα αντίγραφα ασφαλείας και κάθε αρχείο που έχει αντιγραφεί μπορεί να έχει προσαρτήσει την τρέχουσα ημερομηνία στο τέλος του ονόματός του. Τα σενάρια δεν είναι απλώς επίκληση εντολών, ούτε. Είναι προγράμματα από μόνα τους. Η δέσμη ενεργειών σάς επιτρέπει να χρησιμοποιείτε συναρτήσεις προγραμματισμού - όπως βρόχους «για», εάν / μετά / δηλώσεις αλλού και ούτω καθεξής - απευθείας στη διεπαφή του λειτουργικού σας συστήματος. Και, δεν χρειάζεται να μάθετε άλλη γλώσσα επειδή χρησιμοποιείτε αυτό που γνωρίζετε ήδη: τη γραμμή εντολών.

Νομίζω ότι είναι πραγματικά η δύναμη του σεναρίου. Μπορείτε να προγραμματίσετε με εντολές που γνωρίζετε ήδη, ενώ μαθαίνετε βασικά τις περισσότερες σημαντικές γλώσσες προγραμματισμού. Πρέπει να κάνετε κάτι επαναλαμβανόμενο και κουραστικό; Σενάρε το! Χρειάζεστε μια συντόμευση για μια πραγματικά περίπλοκη εντολή; Σενάρε το! Θέλετε να δημιουργήσετε μια πραγματικά εύχρηστη διεπαφή γραμμής εντολών για κάτι; Σενάρε το!

Πριν ξεκινήσεις

Πριν ξεκινήσουμε τη σειρά σεναρίων, ας καλύψουμε μερικές βασικές πληροφορίες. Θα χρησιμοποιούμε το bash shell, το οποίο χρησιμοποιούν οι περισσότερες διανομές Linux εγγενώς. Το Bash είναι διαθέσιμο και για χρήστες Mac OS και Cygwin σε Windows. Δεδομένου ότι είναι τόσο καθολικό, θα πρέπει να μπορείτε να κάνετε σενάριο ανεξάρτητα από την πλατφόρμα σας. Επιπλέον, αρκεί να υπάρχουν όλες οι εντολές που αναφέρονται, τα σενάρια μπορούν να λειτουργήσουν σε πολλές πλατφόρμες χωρίς να απαιτείται ελάχιστη προσαρμογή.

Η δέσμη ενεργειών μπορεί εύκολα να κάνει χρήση των προνομίων «διαχειριστής» ή «υπερχρήστη», οπότε είναι καλύτερο να δοκιμάσετε τα σενάρια πριν τα θέσετε σε λειτουργία. Χρησιμοποιήστε επίσης την κοινή λογική, όπως να βεβαιωθείτε ότι έχετε αντίγραφα ασφαλείας των αρχείων στα οποία πρόκειται να εκτελέσετε ένα σενάριο. Είναι επίσης πολύ σημαντικό να χρησιμοποιήσετε τις σωστές επιλογές, όπως –i για την εντολή rm, έτσι ώστε να απαιτείται η αλληλεπίδρασή σας. Αυτό μπορεί να αποτρέψει κάποια δυσάρεστα λάθη. Ως εκ τούτου, διαβάστε σενάρια που κατεβάζετε και προσέξτε τα δεδομένα που έχετε, σε περίπτωση που τα πράγματα πάνε στραβά.

Στον πυρήνα τους, τα σενάρια είναι απλά αρχεία απλού κειμένου. Μπορείτε να χρησιμοποιήσετε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου για να τα γράψετε: gedit, emacs, vim, nano… Αυτή η λίστα συνεχίζεται. Απλώς φροντίστε να το αποθηκεύσετε ως απλό κείμενο, όχι ως εμπλουτισμένο κείμενο ή ως έγγραφο του Word. Δεδομένου ότι μου αρέσει η ευκολία χρήσης που παρέχει το nano, θα το χρησιμοποιήσω.

Δικαιώματα και ονόματα σεναρίων

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

chmod + x ~ / somecrazyfolder / script

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

chmod u + x ~ / somecrazyfolder / script

Για να εκτελέσετε αυτό το σενάριο, θα πρέπει να κάνετε cd στον κατάλληλο κατάλογο και, στη συνέχεια, να εκτελέσετε το σενάριο ως εξής:

cd ~ / somecrazyfolder

./script1

Για να κάνετε τα πράγματα πιο βολικά, μπορείτε να τοποθετήσετε σενάρια σε ένα φάκελο "bin" στον αρχικό σας κατάλογο:

~ / κάδος

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

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

ποια [εντολή]

Πολλοί άνθρωποι ονομάζουν τα αρχικά σενάρια τους «δοκιμή» και όταν προσπαθούν να το τρέξουν στη γραμμή εντολών, τίποτα δεν συμβαίνει. Αυτό συμβαίνει επειδή έρχεται σε διένεξη με την εντολή δοκιμής, η οποία δεν κάνει τίποτα χωρίς επιχειρήματα. Να είστε πάντα βέβαιοι ότι τα ονόματα των σεναρίων σας δεν έρχονται σε διένεξη με τις εντολές, αλλιώς μπορεί να βρεθείτε να κάνετε πράγματα που δεν σκοπεύετε να κάνετε!

Οδηγίες σεναρίου

Όπως ανέφερα προηγουμένως, κάθε αρχείο σεναρίου είναι ουσιαστικά απλό κείμενο. Αυτό δεν σημαίνει ότι μπορείτε να γράψετε ό, τι θέλετε όλα, ανόητα. Όταν επιχειρείται να εκτελεστεί ένα αρχείο κειμένου, τα κελύφη θα αναλυθούν μέσω αυτών για ενδείξεις σχετικά με το αν είναι σενάρια ή όχι και πώς να χειριστούν τα πάντα σωστά. Εξαιτίας αυτού, υπάρχουν μερικές οδηγίες που πρέπει να γνωρίζετε.

  1. Κάθε σενάριο πρέπει να είναι με "#! / Bin / bash"
  2. Κάθε νέα γραμμή είναι μια νέα εντολή
  3. Οι γραμμές σχολίων ξεκινούν με ένα #
  4. Οι εντολές περιβάλλονται από ()

Το Hack-Bang Hack

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

#! / bin / bash

Εάν χρησιμοποιείτε άλλο κέλυφος, αντικαταστήστε το μονοπάτι του εδώ. Οι γραμμές σχολίων ξεκινούν με κατακερματισμούς (#), αλλά προσθέτοντας το bang (!) Και τη διαδρομή κέλυφος αφού είναι ένα είδος hack που θα παρακάμψει αυτόν τον κανόνα σχολίων και θα αναγκάσει το σενάριο να εκτελέσει με το κέλυφος στο οποίο δείχνει αυτή η γραμμή.

Νέα γραμμή = Νέα εντολή

Κάθε νέα γραμμή πρέπει να θεωρείται νέα εντολή ή στοιχείο ενός μεγαλύτερου συστήματος. Εάν / / / / δηλώσεις, για παράδειγμα, θα αναλάβει πολλές γραμμές, αλλά κάθε στοιχείο αυτού του συστήματος βρίσκεται σε μια νέα γραμμή. Μην αφήσετε μια εντολή να περάσει στην επόμενη γραμμή, καθώς αυτό μπορεί να περικόψει την προηγούμενη εντολή και να σας δώσει ένα σφάλμα στην επόμενη γραμμή. Εάν το πρόγραμμα επεξεργασίας κειμένου σας το κάνει αυτό, θα πρέπει να απενεργοποιήσετε την αναδίπλωση κειμένου για να είστε στην ασφαλή πλευρά. Μπορείτε να απενεργοποιήσετε την αναδίπλωση κειμένου σε νανο bit πατώντας ALT + L.

Σχολιάζετε συχνά με #s

Εάν ξεκινήσετε μια γραμμή με #, η γραμμή αγνοείται. Αυτό το μετατρέπει σε μια γραμμή σχολίων, όπου μπορείτε να θυμηθείτε ποια ήταν η έξοδος της προηγούμενης εντολής ή τι θα κάνει η επόμενη εντολή. Και πάλι, απενεργοποιήστε την αναδίπλωση κειμένου ή σπάστε το σχόλιό σας σε πολλές γραμμές που ξεκινούν με κατακερματισμό. Η χρήση πολλών σχολίων είναι μια καλή πρακτική να διατηρείτε, καθώς επιτρέπει σε εσάς και σε άλλα άτομα να τροποποιήσετε τα σενάρια σας πιο εύκολα. Η μόνη εξαίρεση είναι το προαναφερθέν Hash-Bang hack, οπότε μην ακολουθείτε το #s με! S. ;-)

Οι εντολές περιβάλλονται από παρενθέσεις

Σε παλαιότερες ημέρες, οι αντικαταστάσεις εντολών έγιναν με μεμονωμένα σημάδια (", μοιράζεται το πλήκτρο ~) Δεν πρόκειται να το αγγίξουμε ακόμη, αλλά καθώς οι περισσότεροι άνθρωποι πηγαίνουν και εξερευνούν αφού μάθουν τα βασικά, είναι ίσως καλή ιδέα να αναφέρουμε ότι πρέπει να χρησιμοποιήσετε παρενθέσεις. Αυτό συμβαίνει κυρίως επειδή όταν τοποθετείτε - τοποθετείτε εντολές σε άλλες εντολές - οι παρενθέσεις λειτουργούν καλύτερα.

Το πρώτο σας σενάριο

Ας ξεκινήσουμε με ένα απλό σενάριο που σας επιτρέπει να αντιγράψετε αρχεία και να προσθέσετε ημερομηνίες στο τέλος του ονόματος αρχείου. Ας το ονομάσουμε "datecp". Αρχικά, ας δούμε αν αυτό το όνομα έρχεται σε σύγκρουση με κάτι:

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

Ας δημιουργήσουμε ένα κενό αρχείο στο φάκελο ~ / bin:

αγγίξτε ~ / bin / datecp

Και, ας αλλάξουμε την άδεια τώρα, πριν ξεχάσουμε:

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

nano ~ / bin / datecp

Και, ας προχωρήσουμε και βάλουμε στην πρώτη προϋπόθεση και ένα σχόλιο σχετικά με το τι κάνει αυτό το σενάριο.

Στη συνέχεια, ας δηλώσουμε μια μεταβλητή. Εάν έχετε πάρει ποτέ άλγεβρα, πιθανότατα γνωρίζετε τι είναι αυτό. Μια μεταβλητή μας επιτρέπει να αποθηκεύουμε πληροφορίες και να κάνουμε πράγματα με αυτήν. Οι μεταβλητές μπορούν να «επεκταθούν» όταν αναφέρονται αλλού. Δηλαδή, αντί να εμφανίζουν το όνομά τους, θα εμφανίζουν τα αποθηκευμένα περιεχόμενά τους. Μπορείτε αργότερα να πείτε την ίδια μεταβλητή για την αποθήκευση διαφορετικών πληροφοριών και τυχόν οδηγίες που προκύπτουν μετά από αυτήν θα χρησιμοποιήσουν τις νέες πληροφορίες. Είναι πραγματικά φανταχτερό placeholder.

Τι θα βάλουμε στη μεταβλητή; Λοιπόν, ας αποθηκεύσουμε την ημερομηνία και την ώρα! Για να γίνει αυτό, θα καλέσουμε την εντολή ημερομηνία.

Ρίξτε μια ματιά στο παρακάτω στιγμιότυπο οθόνης για τον τρόπο δημιουργίας της εξόδου της εντολής ημερομηνίας:

Μπορείτε να δείτε ότι προσθέτοντας διαφορετικές μεταβλητές που ξεκινούν με%, μπορείτε να αλλάξετε την έξοδο της εντολής σε αυτό που θέλετε. Για περισσότερες πληροφορίες, μπορείτε να δείτε τη μη αυτόματη σελίδα για την εντολή ημερομηνίας.

Ας χρησιμοποιήσουμε αυτήν την τελευταία επανάληψη της εντολής ημερομηνία, "ημερομηνία +% m_% d_% y-% H.% M.% S", και χρησιμοποιήστε αυτήν στο σενάριό μας.

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

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

μεταβλητή = $ (ορίσματα εντολών - επιλογών)

Και για εμάς, θα το φτιάξουμε έτσι:

date_formatted = $ (ημερομηνία +% m_% d_% y-% H.% M.% S)

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

Ακολουθεί ένα παράδειγμα σεναρίου και το αποτέλεσμα:

Σημειώστε ότι υπάρχουν δύο κενά στην έξοδο. Εμφανίζονται το διάστημα εντός των εισαγωγικών της εντολής echo και το διάστημα μπροστά από τη μεταβλητή. Μην χρησιμοποιείτε κενά εάν δεν θέλετε να εμφανίζονται. Σημειώστε επίσης ότι χωρίς αυτήν την προστιθέμενη γραμμή «ηχώ», το σενάριο δεν θα έδινε καθόλου έξοδο.

Ας επιστρέψουμε στο σενάριό μας. Ας προσθέσουμε στη συνέχεια το τμήμα αντιγραφής της εντολής.

cp –iv $ 1 $ 2. $ date_formatted

Αυτό θα επικαλεστεί την εντολή αντιγραφής, με τις επιλογές –i και –v. Το πρώτο θα σας ζητήσει επαλήθευση πριν αντικαταστήσετε ένα αρχείο και το δεύτερο θα εμφανίσει αυτό που βρίσκεται στη γραμμή εντολών.

Στη συνέχεια, μπορείτε να δείτε ότι έχω προσθέσει την επιλογή "$ 1". Κατά τη δέσμη ενεργειών, ένα σύμβολο δολαρίου ($) ακολουθούμενο από έναν αριθμό θα υποδηλώνει το αριθμημένο όρισμα του σεναρίου όταν κλήθηκε. Για παράδειγμα, στην ακόλουθη εντολή:

cp –iv Trogdor2.mp3 ringtone.mp3

Το πρώτο όρισμα είναι "Trogdor2.mp3" και το δεύτερο όρισμα είναι "ringtone.mp3".

Κοιτάζοντας πίσω το σενάριό μας, μπορούμε να δούμε ότι αναφερόμαστε σε δύο επιχειρήματα:

Αυτό σημαίνει ότι όταν εκτελούμε το σενάριο, θα πρέπει να παρέχουμε δύο ορίσματα για να λειτουργεί σωστά το script. Το πρώτο όρισμα, $ 1, είναι το αρχείο που θα αντιγραφεί και αντικαθίσταται ως το πρώτο όρισμα της εντολής "cp –iv".

Το δεύτερο όρισμα, $ 2, θα λειτουργήσει ως το αρχείο εξόδου για την ίδια εντολή. Όμως, μπορείτε επίσης να δείτε ότι είναι διαφορετικό. Προσθέσαμε μια τελεία και αναφέραμε τη μεταβλητή "date_formatted" από ψηλά Είστε περίεργοι για το τι κάνει αυτό;

Να τι συμβαίνει όταν εκτελείται το σενάριο:

Μπορείτε να δείτε ότι το αρχείο εξόδου παρατίθεται ως ό, τι έχω εισαγάγει για $ 2, ακολουθούμενο από τελεία και μετά την έξοδο της εντολής ημερομηνίας! Έχει νόημα, σωστά;

Τώρα όταν εκτελώ την εντολή datecp, θα τρέξει αυτό το σενάριο και θα μου επιτρέψει να αντιγράψω οποιοδήποτε αρχείο σε μια νέα θέση και να προσθέσω αυτόματα την ημερομηνία και την ώρα στο τέλος του ονόματος αρχείου. Χρήσιμο για αρχειοθέτηση υλικού!

Το σενάριο Shell είναι το επίκεντρο του λειτουργικού σας λειτουργικού συστήματος για εσάς. Δεν χρειάζεται να μάθετε μια νέα γλώσσα προγραμματισμού για να την πραγματοποιήσετε. Δοκιμάστε το σενάριο με μερικές βασικές εντολές στο σπίτι και αρχίστε να σκέφτεστε τι μπορείτε να χρησιμοποιήσετε για αυτό.

Έχετε σενάριο; Έχετε συμβουλές για αρχάριους; Μοιραστείτε τις σκέψεις σας στα σχόλια! Υπάρχουν ακόμα πολλά σε αυτή τη σειρά!