Πώς να μεταβιβάσετε επιχειρήματα σε ένα σενάριο Bash
Γράψτε ένα σενάριο Bash έτσι ώστε να λαμβάνει ορίσματα που καθορίζονται όταν το σενάριο καλείται από τη γραμμή εντολών. Χρησιμοποιήστε αυτήν τη μέθοδο όταν ένα σενάριο πρέπει να εκτελέσει μια ελαφρώς διαφορετική λειτουργία ανάλογα με τις τιμές των παραμέτρων εισόδου, που ονομάζεται επίσης επιχειρήματα.

Lifewire / Ραν Ζενγκ
Παράδειγμα επιτυχούς επιχειρημάτων σε σενάριο Bash
Αν αναπτύξατε ένα σενάριο που ονομάζεται stats.sh που μετράει τις λέξεις σε ένα αρχείο, είναι καλύτερο να περάσετε το όνομα του αρχείου ως όρισμα, έτσι ώστε το ίδιο σενάριο να μπορεί να χρησιμοποιηθεί για όλα τα αρχεία που θα υποβληθούν σε επεξεργασία. Για παράδειγμα, εάν το όνομα του προς επεξεργασία αρχείου είναι λίστα τραγουδιών, πληκτρολογήστε τα ακόλουθα στη γραμμή εντολών:
sh stats.sh λίστα τραγουδιών
Η πρόσβαση στα ορίσματα γίνεται μέσα σε ένα σενάριο χρησιμοποιώντας τις μεταβλητές $1, $2, $3, και ούτω καθεξής. Η μεταβλητή $1 αναφέρεται στο πρώτο επιχείρημα, $2 στο δεύτερο επιχείρημα, και $3 στο τρίτο επιχείρημα. Για παράδειγμα, στο σενάριο:
FILE1=$1
wc $FILE1
Αντιστοιχίστε μια μεταβλητή με ένα περιγραφικό όνομα στην τιμή του πρώτου ορίσματος ($1), και μετά καλέστε το βοηθητικό πρόγραμμα καταμέτρησης λέξεων (τουαλέτα) στη μεταβλητή $FILE1 ή οτιδήποτε άλλο θέλετε να κάνετε.
Εάν χρειάζεστε έναν μεταβλητό αριθμό ορισμάτων, χρησιμοποιήστε το $@ μεταβλητή, η οποία είναι ένας πίνακας όλων των παραμέτρων εισόδου. Αυτή η διαδικασία χρησιμοποιεί α για βρόχο για την επαναληπτική επεξεργασία του καθενός, όπως φαίνεται στο ακόλουθο παράδειγμα:
για FILE1 σε "$@"
κάνω
wc $FILE1
Έγινε
Ακολουθεί ένα παράδειγμα για το πώς να καλέσετε αυτό το σενάριο με ορίσματα από τη γραμμή εντολών:
sh stats.sh songlist1 songlist2 songlist3
Εάν ένα όρισμα περιλαμβάνει κενά, περικλείστε το με μονά εισαγωγικά. Για παράδειγμα:
sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'
Μέθοδος Flags
Συχνά γράφεται ένα σενάριο έτσι ώστε τα ορίσματα να μπορούν να περάσουν με οποιαδήποτε σειρά χρησιμοποιώντας σημαίες. Με τη μέθοδο flags, ορισμένα από τα ορίσματα μπορούν να γίνουν προαιρετικά.
Για παράδειγμα, γράψτε ένα σενάριο που ανακτά πληροφορίες από μια βάση δεδομένων με βάση καθορισμένες παραμέτρους, όπως π.χ όνομα χρήστη, ημερομηνία, και προϊόνκαι δημιουργεί μια αναφορά σε καθορισμένη μορφή. Το σενάριο πρέπει να γραφτεί με τέτοιο τρόπο ώστε αυτές οι παράμετροι να περνούν κατά την κλήση του σεναρίου. Μπορεί να μοιάζει με αυτό:
makereport -u jsmith -p notebooks -d 20-10-2011 -f pdf
Το Bash ενεργοποιεί αυτήν τη λειτουργία με το παίρνει λειτουργία. Για το παραπάνω παράδειγμα, χρησιμοποιήστε παίρνει ως εξής:
ενώ παίρνει το u: d: p: f: επιλογή
κάνω
υπόθεση "${option}"
σε
u) USER=${OPTARG};;
δ) DATE=${OPTARG};;
ιστ) ΠΡΟΪΟΝ=${OPTARG};;
στ) FORMAT=${OPTARG};;
esac
Έγινε
Αυτός είναι ένας βρόχος while που χρησιμοποιεί το παίρνει λειτουργία και ένα λεγόμενο optstring-σε αυτήν την περίπτωση u: d: p: f:— να επαναλάβουμε μέσα από τα επιχειρήματα. ο ενώ Ο βρόχος διασχίζει τη συμβολοσειρά optstring, η οποία περιέχει τις σημαίες που χρησιμοποιούνται για τη μεταβίβαση ορισμάτων και εκχωρεί την τιμή ορίσματος που παρέχεται για αυτήν τη σημαία στη μεταβλητή επιλογή. ο υπόθεση Στη συνέχεια, η δήλωση εκχωρεί την τιμή της μεταβλητής επιλογή σε μια καθολική μεταβλητή που χρησιμοποιείται μετά την ανάγνωση όλων των ορισμάτων.
Έννοιες για Colons
Τα άνω και κάτω τελεία στο optstring σημαίνουν ότι απαιτούνται τιμές για τις αντίστοιχες σημαίες. Στο παραπάνω παράδειγμα του u: d: p: f:, όλες οι σημαίες ακολουθούνται από άνω και κάτω τελεία. Αυτό σημαίνει ότι όλες οι σημαίες χρειάζονται μια τιμή. Αν, για παράδειγμα, το ρε και φά οι σημαίες δεν αναμενόταν να έχουν αξία, υ: δπ: στ θα ήταν το optstring.
Η άνω τελεία εκκίνησης θέτει τα getopts σε «αθόρυβη λειτουργία αναφοράς». Αντί να γίνει εντελώς λάθος το σενάριο, οποιοδήποτε απροσδόκητο όρισμα γεμίζει το; επιλογή και μπορείτε να το αναζητήσετε ή να το χειριστείτε όπως χρειάζεται. Χωρίς την αρχική άνω και κάτω τελεία στη συμβολοσειρά opt, το τερματικό εμφανίζει ένα σφάλμα. Για παράδειγμα, έχω το σενάριο από πάνω που μετράει λέξεις. Αναμένει μια σύνταξη όπως "stats.sh -f όνομα αρχείου". Χωρίς την άνω τελεία, αν δοκιμάσω "stats.sh -h", παίρνω:
stats.sh -h
stats.sh: παράνομη επιλογή -- η
Ενώ, με την άνω και κάτω τελεία, μπορώ στη συνέχεια να βάλω μια γραμμή στο σενάριό μου περιμένοντας κάτι τέτοιο, όπως - ?) echo "No -${OPTARG} όρισμα βρέθηκε.";;. Αυτό μου επιτρέπει στη συνέχεια να καταγράψω και να χειριστώ την απροσδόκητη καταχώρηση (σε αυτήν την περίπτωση βγάζοντας το δικό μου μήνυμα σφάλματος).
stats.sh -h
Δεν βρέθηκε όρισμα -h.
Τα επιχειρήματα των οποίων δεν προηγείται σημαία αγνοούνται παίρνει. Εάν οι σημαίες που καθορίζονται στο optstring δεν παρέχονται κατά την κλήση του σεναρίου, τότε δεν συμβαίνει τίποτα, εκτός εάν χειριστείτε ειδικά αυτήν την περίπτωση στον κώδικά σας. Τυχόν επιχειρήματα που δεν χειρίζονται πέφτει μπορεί ακόμα να αποτυπωθεί με το κανονικό $1, $2, και $3 μεταβλητές.