Πώς να εκτελέσετε εντολές από ένα σενάριο Shell

How Execute Commands From Within Shell Script



Σε bash, η εκτέλεση εντολών από ένα σενάριο κελύφους μπορεί να είναι λίγο εκφοβιστική στην αρχή και μπορεί να απαιτεί ένα βήμα πίστης. Εξάλλου, οι εντολές που εκτελούνται μέσα σε ένα σενάριο bash δεν είναι διαδραστικές. Εδώ θα θέσουμε το θεμέλιο για την εκτέλεση εντολών μέσα από ένα σενάριο κελύφους απαντώντας στις ακόλουθες ερωτήσεις σχετικά με τις εντολές: Από πού προέρχονται; Τι είναι? Πώς τα χρησιμοποιούμε σε ένα σενάριο;

Από πού προέρχονται οι εντολές;

Οι εντολές στο bash προέρχονται από οποιαδήποτε από τις ακόλουθες κατηγορίες:







Bash ίδια (δείτε ενσωματωμένα)

Το Bash έρχεται με το δικό του σύνολο εντολών για να επιτρέψει την πρόσβαση στις ενσωματωμένες λειτουργίες του, όπως η δήλωση συστοιχιών, η ανάγνωση γραμμών από ένα αρχείο και άλλες λειτουργίες ενσωματωμένες σε bash. Καλούμε εντολές αυτής της κατηγορίας, εντολές bash builtin ή εν συντομία buildins.



Εκτελέσιμα στο περιβάλλον σας (δείτε εξωτερικές εντολές)

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



Λειτουργία καθορισμένη από το χρήστη (δείτε λειτουργίες)

Πριν από την εκτέλεση εξωτερικών εντολών και ενσωματωμένων, το bash ελέγχει εάν έχει οριστεί μια συνάρτηση. Εάν είναι, η συνάρτηση εκτελείται ως εντολή. Εάν όχι, προχωράει κάτω από τη σειρά προτεραιότητας για τις εντολές. Για να εκτελεστεί η συνάρτηση που ορίζεται εκτός ενός σεναρίου, πρέπει να δηλωθούν με το χαρακτηριστικό -x. Διαφορετικά, ενδέχεται να συμπεριληφθούν χρησιμοποιώντας το. Εντολή. Καλούμε εντολές αυτής της κατηγορίας συντομευμένες συναρτήσεις ή συναρτήσεις.





Τι είναι οι εντολές

Μια εντολή είναι κάθε λέξη που πρέπει να αντιμετωπίζεται ως ένα μόνο σημείο εισόδου ενός προγράμματος εντός του περιβάλλοντος κελύφους. Σε περίπτωση που εκτελεστεί η εντολή, η ίδια η εντολή και τα προαιρετικά ορίσματα μεταφέρονται ως παράμετροι θέσης, $ {0}, $ {1}, $ {2},… Η μηδενική παράμετρος θέσης ($ {0}) ορίζει το η ίδια η εντολή και είναι αμετάβλητη στο πλαίσιο. Δηλαδή, σε αντίθεση με τις παραμέτρους θέσης στις συναρτήσεις, $ {1}, $ {2},… που μπορεί να αλλάξουν ανάλογα με το περιβάλλον, το $ {0} είναι αμετάβλητο μεταξύ των κλήσεων λειτουργίας.

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



Ακολουθεί μια λίστα τύπων εντολών που πρέπει να γνωρίζετε.

Ενσωματωμένες εντολές

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

Ανάλογα με τον ορισμό και τον αριθμό έκδοσης του διερμηνέα bash, ορισμένες εντολές ενδέχεται να μην είναι διαθέσιμες.

Εξωτερικές εντολές

Οι εξωτερικές εντολές είναι εκτελέσιμα προσβάσιμα εκτός από ένα σενάριο bash όπως το curl. Σε αντίθεση με τις συναρτήσεις, οι εξωτερικές εντολές δεν αποθηκεύονται ως μεταβλητές.

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

bash: unknown-command:εντολήδεν βρέθηκε

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

μπούκλα() {
εντολή $ {FUNCNAME}...
}

Αυτό λειτουργεί επειδή οι συναρτήσεις έχουν μεγαλύτερη προτεραιότητα από τις εξωτερικές εντολές και ακόμη και τα ενσωματωμένα bash. Ο περιορισμός είναι οι επιτρεπόμενοι χαρακτήρες σε ένα όνομα συνάρτησης.

Σημειώστε ότι το παραπάνω παράδειγμα μπορεί να επιτευχθεί χρησιμοποιώντας ένα ψευδώνυμο ως εξής.

ψευδώνυμο μπούκλα= '
{
μπούκλα ...
}
'

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

Λειτουργίες

Οι λειτουργίες κυβερνούν στο bash. Πριν εξετάσετε τις ενσωματωμένες και τις εξωτερικές εντολές, το bash ελέγχει εάν μια συνάρτηση ορίζεται από ένα όνομα συνάρτησης υποψηφίου, η πρώτη λέξη που εμφανίζεται σε μια γραμμή ή μετά από το? χαρακτήρα που ορίζει το τέλος μιας γραμμής εντολών. Η μόνη εξαίρεση είναι οι μεταβλητές bash γραμμένες σε όλα τα κεφαλαία, όπως $ {FUNCNAME}.

ψευδώνυμο() { FUNCNAME= asdf;πέταξε έξω $ {@ ,,}?}
ψευδώνυμο μπούκλα='TEST CURL ALIAS' #?

Απλές εντολές

Οι απλές εντολές ορίζονται στις σελίδες bash man ως λέξη που ακολουθείται από προαιρετικά ορίσματα. Στο πλαίσιο αυτό, μια απλή εντολή μπορεί να είναι είτε ενσωματωμένη, εξωτερική εντολή ή συνάρτηση.

Πώς να εκτελέσετε εντολές μέσα από ένα σενάριο bash

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

Ακολουθούν ορισμένοι τρόποι ελέγχου της προτεραιότητας σε ένα σενάριο bash.

Ας αποφασίσει ο μπας

όνομα_εντολής

Ως επί το πλείστον, ειδικά στην αρχή, αφήνουμε το bash να αποφασίσει ποια εντολή θα χρησιμοποιήσει. Ωστόσο, υπάρχουν περιπτώσεις όπου η πρόθεσή σας μπορεί να μην ερμηνευτεί σωστά από το bash. Αυτό συμβαίνει όταν επικαλύπτονται ονόματα συναρτήσεων και εξωτερικές εντολές ή ενσωματωμένα.

Εκτελέστε μια εξωτερική εντολή

εντολήόνομα_εντολής

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

Παραδείγματα εξωτερικών εντολών

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

αρχείο
πηγαίνω
φιλέτο
Παράδειγμα: Λήψη τύπου αρχείου και πληροφοριών
{ # λάβετε τύπο αρχείου και πληροφορίες
αρχείο $ {infile} # (1,2)
}
# (1) εντολή, αρχείο
# (2) infile = {Path to file}
Παράδειγμα: Στάδιο τροποποιημένων και νέων αρχείων στο git
{ # αρχεία σταδίου στο git
git addΤο# (1)
}
# (1) εντολή, git
Παράδειγμα: Δημιουργήστε τέχνη ascii χρησιμοποιώντας φιλέτο
{ # δημιουργήστε τέχνη ascii
φιλέτο$ {μήνυμα} # (1,2)
}
# (1) εντολή, φιλέτο
# (2) μήνυμα = {Μήνυμα για εμφάνιση ως art ascii}

Εκτέλεση ενσωματωμένης εντολής

ενσωματωμένοόνομα_εντολής

Ας υποθέσουμε ότι το όνομα_διαταγής είναι μία από τις εντολές που ορίζονται ως ενσωματωμένο στο bash. Για να ενημερώσουμε το bash ότι θέλουμε να τρέξουμε το command_name ως ενσωματωμένο, χρησιμοποιούμε το ενσωματωμένο ενσωματωμένο.

Παραδείγματα εντολών Builtin
Παράδειγμα: Πόσα buildins;
ενσωματωμένο{,}{,,}{,,,} # πόσα ενσωματωμένα;
Παράδειγμα: Phantom statement
{
δηλώνω() { πέταξε έξωωπα!?}
δηλώνω–Χφδηλώνω #?
}

συμπέρασμα

Είναι αρκετά εύκολο να εκτελέσετε μια εντολή μέσα από ένα σενάριο κελύφους bash. Υπάρχουν τρεις κύριοι τύποι εντολών. Η γνώση του πώς ερμηνεύονται οι απλές εντολές στο bash μπορεί να οδηγήσει σε βελτιωμένο έλεγχο του είδους εντολών που εκτελούνται σε χρόνο εκτέλεσης.