Πώς να χρησιμοποιήσετε επεκτάσεις $ () και $ {} σε ένα σενάριο Shell

How Use Expansions Shell Script



Εάν χρησιμοποιείτε σύστημα Linux, ίσως γνωρίζετε ήδη πόσο σημαντική είναι η διεπαφή κελύφους για την αλληλεπίδραση με το σύστημά σας. Στις περισσότερες διανομές Linux, το Bash είναι το προεπιλεγμένο κέλυφος που χρησιμοποιούμε για την εκτέλεση εντολών και την εκτέλεση σεναρίων. Ένα σενάριο κελύφους είναι ένα σύνολο εντολών που, όταν εκτελεστεί, χρησιμοποιείται για την εκτέλεση ορισμένων χρήσιμων λειτουργιών στο Linux. Αυτό το αρχείο .sh, γραμμένο από έναν χρήστη, περιέχει όλες τις εντολές που χρησιμοποιούνται για την εκτέλεση μιας εργασίας, έτσι ώστε να μην χρειαστεί να εκτελέσουμε αυτές τις εντολές χειροκίνητα, μία προς μία.

Σε αυτό το σεμινάριο, θα εξηγήσουμε δύο από τις πιο χρήσιμες επεκτάσεις bash που χρησιμοποιούνται σε σενάρια κελύφους:







  • $ () - η αντικατάσταση της εντολής
  • $ {} - η παράμετρος αντικατάστασης/επέκτασης μεταβλητής

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



Έχουμε εκτελέσει όλα τα παραδείγματα και τα σενάρια που αναφέρονται σε αυτό το άρθρο σε ένα σύστημα Debian 10 Buster. Ωστόσο, μπορείτε εύκολα να τα αναπαράγετε στα περισσότερα κελύφη Linux. Χρησιμοποιούμε την προεπιλεγμένη γραμμή εντολών Debian, το Terminal, για αυτό το σεμινάριο. Στο Debian, μπορείτε να έχετε πρόσβαση μέσω της γραμμής αναζήτησης Εφαρμογή εκκίνησης ως εξής:







Για να αποκτήσετε πρόσβαση στην εφαρμογή εκκίνησης, απλώς πατήστε το πλήκτρο Super/Windows στο πληκτρολόγιό σας.

$ () Υποκατάσταση εντολής

Σύμφωνα με το επίσημο εγχειρίδιο αναφοράς GNU Bash:



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

$(εντολή)
ή
'εντολή'

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

$πέταξε έξω$(ημερομηνία)
$πέταξε έξω'ημερομηνία'

Μπορείτε επίσης να χρησιμοποιήσετε αντικατάσταση εντολών για να εκχωρήσετε τιμή σε μια μεταβλητή. Για παράδειγμα, θα εκτυπώσουμε τη σημερινή ημερομηνία μέσω της μεταβλητής ΣΗΜΕΡΑ ως εξής:

$ΣΗΜΕΡΑ= $(ημερομηνία)
$πέταξε έξω '$ ΣΗΜΕΡΑ'

Ένα άλλο βοηθητικό πρόγραμμα αντικατάστασης εντολών είναι σε βρόχους κελύφους για να λάβετε είσοδο. Εδώ, θα προσπαθήσουμε να εκτυπώσουμε όλα τα αρχεία .txt στον αρχικό μας φάκελο χρησιμοποιώντας αντικατάσταση εντολών:

Γιαφάσε /Σπίτι/σε εσένα/ *.κείμενο
κάνω
πέταξε έξω '$ f'
Έγινε

Χρήση υποκατάστασης εντολών σε ένα σενάριο Shell

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

#!/bin/sh

πέταξε έξω ***Αναφορά κατάστασης***

ΣΗΜΕΡΑ= $(ημερομηνία)
πέταξε έξω 'Σήμερα είναι$ ΣΗΜΕΡΑ'

ΧΡΗΣΤΕΣ= $(οι οποίοι | τουαλέτα-ο)
πέταξε έξω '$ USERSοι χρήστες είναι συνδεδεμένοι αυτήν τη στιγμή '

UPTIME= $(ημερομηνία?uptime)
πέταξε έξω 'Ο χρόνος λειτουργίας είναι$ UPTIME'

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

Το έκανε εκτελέσιμο και στη συνέχεια το εκτέλεσε μέσω της ακόλουθης εντολής:

$chmod+ x status.sh
$./statys.sh

Εδώ είναι η έξοδος του σεναρίου status.sh:

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

$ {} Αντικατάσταση/επέκταση παραμέτρων

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

Επέκταση/αντικατάσταση παραμέτρων είναι η διαδικασία ανάκτησης της τιμής από την αναφερόμενη οντότητα/παράμετρο. Είναι σαν να επεκτείνετε μια μεταβλητή για να λάβετε την τιμή της.

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

Δείτε πώς μπορείτε να χρησιμοποιήσετε την επέκταση παραμέτρων στο Bash:

$ {parameter}

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

$όνομα='John Doe'
$πέταξε έξω $ {name}

Αυτή η εντολή θα αντικαταστήσει την τιμή του ονόματος της μεταβλητής που θα χρησιμοποιηθεί από την εντολή echo:

Μπορεί να σκέφτεστε ότι το ίδιο μπορεί να επιτευχθεί αποφεύγοντας τα σγουρά στηρίγματα ως εξής:

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

$πέταξε έξω «Το όνομα του ατόμου είναι$ name_'

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

$πέταξε έξω «Το όνομα του ατόμου είναι$ {name}_ '

Ακολουθούν όλοι οι τρόποι με τους οποίους οι μεταβλητές αντικαθίστανται στο Shell:

$ {variable} Αυτή η εντολή υποκαθιστά την τιμή της μεταβλητής.
$ {variable: -word} Εάν μια μεταβλητή είναι μηδενική ή αν δεν έχει οριστεί, η λέξη αντικαθίσταται από τη μεταβλητή. Η τιμή της μεταβλητής δεν αλλάζει.
$ {variable: = word} Εάν μια μεταβλητή είναι μηδενική ή αν δεν έχει οριστεί, η τιμή της μεταβλητής ορίζεται σε λέξη.
$ {variable:? message} Εάν μια μεταβλητή είναι μηδενική ή αν δεν έχει οριστεί, το μήνυμα εκτυπώνεται στο τυπικό σφάλμα bash.
$ {variable:+word} Αν μεταβλητός έχει οριστεί, λέξη αντικαθίσταται από τη μεταβλητή. Ωστόσο, η τιμή της ίδιας της μεταβλητής δεν αλλάζει.

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