Πώς να περάσετε επιχειρήματα σε ένα Bash-Script

Εντολές, σύνταξη και παραδείγματα

Μπορείτε να γράψετε μια δέσμη ενεργειών bash έτσι ώστε να λαμβάνει τα επιχειρήματα που καθορίζονται όταν καλείται η δέσμη ενεργειών από τη γραμμή εντολών. Αυτή η μέθοδος χρησιμοποιείται όταν μια δέσμη ενεργειών πρέπει να εκτελέσει μια ελαφρώς διαφορετική λειτουργία ανάλογα με τις τιμές των παραμέτρων εισόδου (τα επιχειρήματα).

Για παράδειγμα, μπορεί να έχετε ένα σενάριο που ονομάζεται "stats.sh" το οποίο εκτελεί μια συγκεκριμένη εργασία σε ένα αρχείο, όπως η καταμέτρηση των λέξεων του. Εάν θέλετε να μπορείτε να χρησιμοποιήσετε αυτήν τη δέσμη ενεργειών σε πολλά αρχεία, είναι καλύτερο να μεταβιβάσετε το όνομα αρχείου ως όρισμα, έτσι ώστε να μπορείτε να χρησιμοποιήσετε το ίδιο σενάριο για όλα τα αρχεία προς επεξεργασία. Για παράδειγμα, αν το όνομα του αρχείου που πρόκειται να επεξεργαστεί είναι "λίστα τραγουδιών", θα εισάγετε την ακόλουθη γραμμή εντολών:

sh stats.sh λίστα τραγουδιών

Τα επιχειρήματα εισέρχονται μέσα σε μια δέσμη ενεργειών χρησιμοποιώντας τις μεταβλητές $ 1, $ 2, $ 3, κλπ., Όπου το $ 1 αναφέρεται στο πρώτο επιχείρημα, το $ 2 στο δεύτερο επιχείρημα κ.ο.κ. Αυτό απεικονίζεται στο ακόλουθο παράδειγμα:

FILE1 = $ 1 wc $ ΑΡΧΕΙΟ1

Για λόγους ανάγνωσης, ορίστε μια μεταβλητή με ένα περιγραφικό όνομα στην τιμή του πρώτου επιχειρήματος ($ 1) και, στη συνέχεια, καλέστε το βοηθητικό πρόγραμμα count count ( wc ) σε αυτήν τη μεταβλητή ($ FILE1).

Εάν έχετε ένα μεταβλητό αριθμό επιχειρημάτων, μπορείτε να χρησιμοποιήσετε τη μεταβλητή "$ @", η οποία είναι ένας πίνακας όλων των παραμέτρων εισόδου. Αυτό σημαίνει ότι μπορείτε να χρησιμοποιήσετε ένα for-loop για να επεξεργαστείτε επανειλημμένα το καθένα, όπως φαίνεται στο παρακάτω παράδειγμα:

για το ΑΡΧΕΙΟ1 στο "$ @" κάντε το wc $ FILE1 τελείωσε

Ακολουθεί ένα παράδειγμα για το πώς να ονομάσετε αυτή τη δέσμη ενεργειών με επιχειρήματα από τη γραμμή εντολών:

sh stats.sh τραγούδιlist1 songlist2 songlist3

Αν ένα επιχείρημα έχει διαστήματα, πρέπει να το επισυνάψετε με απλά εισαγωγικά. Για παράδειγμα:

sh stats.sh 'τραγούδι λίστα 1' 'songlist 2' 'songlist 3'

Συχνά ένα σενάριο γράφεται έτσι ώστε ο χρήστης να μπορεί να μεταβιβάσει επιχειρήματα με οποιαδήποτε σειρά χρησιμοποιώντας σημαίες. Με τη μέθοδο σημαίες, μπορείτε επίσης να κάνετε κάποια από τα επιχειρήματα προαιρετικά.

Ας υποθέσουμε ότι έχετε μια δέσμη ενεργειών που ανακτά πληροφορίες από μια βάση δεδομένων με βάση συγκεκριμένες παραμέτρους, όπως "όνομα χρήστη", "ημερομηνία" και "προϊόν", και δημιουργεί μια αναφορά σε μια καθορισμένη "μορφή". Τώρα θέλετε να γράψετε το σενάριο σας έτσι ώστε να μπορείτε να περάσετε σε αυτές τις παραμέτρους όταν καλείται το σενάριο. Μπορεί να μοιάζει με αυτό:

makereport -u jsmith -p σημειωματάρια -d 10-20-2011 -f pdf

Το Bash επιτρέπει αυτή τη λειτουργία με τη λειτουργία "getopts". Για το παραπάνω παράδειγμα, θα μπορούσατε να χρησιμοποιήσετε getopts ως εξής:

Αυτός είναι ένας κύκλος χρόνου που χρησιμοποιεί τη λειτουργία "getopts" και μια λεγόμενη "optstring", στην περίπτωση αυτή "u: d: p: f:", για να επαναλάβουμε τα επιχειρήματα. Το while-loop περνά μέσα από το optstring, το οποίο περιέχει τις σημαίες που μπορούν να χρησιμοποιηθούν για να περάσει τα επιχειρήματα και αναθέτει την τιμή του όρου που παρέχεται για τη συγκεκριμένη σημαία στη μεταβλητή "option". Στη συνέχεια, η δήλωση υποθέτει την τιμή της μεταβλητής "επιλογή" σε μια μεταβλητή που μπορεί να χρησιμοποιηθεί μετά την ανάγνωση όλων των επιχειρημάτων.

Οι ορθογώνιοι στο optstring σημαίνουν ότι οι τιμές απαιτούνται για τις αντίστοιχες σημαίες. Στο παραπάνω παράδειγμα όλες οι σημαίες ακολουθούνται από ένα παχύ έντερο: "u: d: p: f:". Αυτό σημαίνει ότι όλες οι σημαίες χρειάζονται μια αξία. Αν, για παράδειγμα, οι σημαίες "d" και "f" δεν αναμένεται να έχουν τιμή, το optstring θα είναι "u: dp: f".

Ένα τετράγωνο στην αρχή του optstring, για παράδειγμα ": u: d: p: f:", έχει εντελώς διαφορετική σημασία. Σας επιτρέπει να χειριστείτε σημαίες που δεν αντιπροσωπεύονται στο optstring. Σε αυτήν την περίπτωση η τιμή της μεταβλητής "επιλογή" έχει οριστεί σε "?" και η τιμή του "OPTARG" έχει οριστεί στην απροσδόκητη σημαία. Σας επιτρέπει να εμφανίσετε ένα κατάλληλο μήνυμα σφάλματος που ενημερώνει τον χρήστη για το λάθος.

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