Μια εικόνα των "μεταβλητών" Linux στη γλώσσα δέσμης ενεργειών Shell - Μέρος 9


Έχουμε ήδη γράψει μια σειρά άρθρων για το Linux Shell Scripting το οποίο χαιρετίστηκε θερμά εκείνη την εποχή και ήταν πολύ σχετικό ακόμα και τώρα. Ακολουθεί ο σύνδεσμος για τη συλλογή άρθρων σχετικά με το σενάριο κελύφους.

  1. Μάθετε Linux Shell Scripting

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

Αποθήκευση εξόδου

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

Μεταβλητές στη γλώσσα scripting

Οι μεταβλητές είναι ένα σημαντικό στοιχείο που χρησιμοποιείται στη δέσμη ενεργειών Shell και δηλώνονται χρησιμοποιώντας την εντολή bash "Declare ". Για να δηλώσουμε μια μεταβλητή «επίπεδο», πρέπει να εκτελέσουμε την παρακάτω εντολή.

declare LEVEL

Σημείωση: Πρέπει να χρησιμοποιήσουμε το "typecast", μια ενσωματωμένη δήλωση για συμβατότητα φλοιού korn. Το «declare» είναι πιο προηγμένο και περιέχει όλες τις δυνατότητες, επομένως συνιστάται όταν χρησιμοποιείτε το BASH.

Κανόνες
  1. Ένα όνομα μεταβλητής πρέπει να δικαιολογεί τη χρήση της μεταβλητής στο σενάριο.
  2. Συνιστάται ανεπιφύλακτα η χρήση του ίδιου ονόματος μεταβλητής σε όλο το πρόγραμμα.
  3. Το όνομα της μεταβλητής μπορεί να είναι κεφαλαία και πεζά, αλλά κατά σύμβαση οι εντολές του κελύφους είναι με πεζά και ως εκ τούτου θα πρέπει να χρησιμοποιούμε το όνομα της μεταβλητής με κεφαλαία, έτσι ώστε να αφαιρείται οποιαδήποτε σύγχυση. π.χ., TOTAL_BILLED_AMOUNT, SELL_REPORT, ORDER_RECEIPT, κ.λπ.

Εκτέλεση

Σε μια μεταβλητή μπορεί να εκχωρηθεί μια τιμή χρησιμοποιώντας ένα σύμβολο ίσου (=). Για να αντιστοιχίσουμε μια κενή συμβολοσειρά σε μια μεταβλητή δεν πρέπει να δώσουμε καμία τιμή μετά το σύμβολο ίσου.

LEVEL =

Ελέγξτε την τιμή που είναι αποθηκευμένη στη μεταβλητή «LEVEL» ως.

printf "%i" $LEVEL

printf, η εντολή που γνωρίζουν οι περισσότεροι προγραμματιστές «C», εκτυπώνει δεδομένα. %i – Αντιπροσωπεύει ακέραιο αριθμό. Μπορούμε να το αντικαταστήσουμε με %c για χαρακτήρα ή %c για συμβολοσειρά, όπως και όταν απαιτείται.

$LEVEL: Σημειώστε το "$" που λειτουργεί ως υποκατάστατο τιμής για τη μεταβλητή "LEVEL".

Δείγμα εξόδου
printf "%i" $LEVEL
0

Εκχωρήστε μια τιμή στη μεταβλητή.

LEVEL=0

Ελέγξτε τα αποθηκευμένα δεδομένα στη μεταβλητή.

printf "%i" $LEVEL
0

ΣΗΜΕΙΩΣΗ: Είναι ενδιαφέρον να σημειωθεί ότι και στις δύο περιπτώσεις, όταν δεν εκχωρήσαμε την τιμή στη μεταβλητή και όταν εκχωρήσαμε την τιμή '0<' στη μεταβλητή 'LEVEL' βγάζει 0. Αν και η έξοδος είναι ίδια και στις δύο περιπτώσεις, η δέσμη ενεργειών φλοιού χειρίζεται διαφορετικά τη δήλωση μεταβλητής.

Εκχωρήστε μια νέα τιμή στη μεταβλητή.

LEVEL=121

Ελέγξτε τα αποθηκευμένα δεδομένα στη μεταβλητή.

printf "%i" $LEVEL
121

Καταργήστε τη ρύθμιση μιας μεταβλητής

Το Declare είναι μια εντολή BASH και δημιουργεί μεταβλητή μόνο όταν εκτελείται. Η μεταβλητή που δημιουργήθηκε έτσι παραμένει στη μνήμη μέχρι να σταματήσει το σενάριο ή να καταστραφεί η μεταβλητή.

unset LEVEL

Προκαθορισμένες μεταβλητές στο BASH

Το BASH έχει πάνω από 50 προκαθορισμένες μεταβλητές. Ορισμένες από αυτές τις μεταβλητές έχουν ειδική σημασία που συνδέεται με το BASH, π.χ., μια μεταβλητή RANDOM εξάγει έναν τυχαίο αριθμό. Εάν δεν οριστεί και στη συνέχεια οριστεί ξανά, η αρχική τιμή της μεταβλητής χάνεται για πάντα. Ως εκ τούτου, συνιστάται να μην χρησιμοποιείτε καμία μεταβλητή που ορίζεται από το σύστημα.

Ακολουθεί μια λίστα με μερικές χρήσιμες μεταβλητές BASH.

  1. BASH—Το πλήρες όνομα διαδρομής του Bash.
  2. BASH_ENV—Σε ένα σενάριο φλοιού, το όνομα του αρχείου προφίλ που εκτελέστηκε πριν από την έναρξη του σεναρίου.
  3. BASH_VERSION—Η έκδοση του Bash (για παράδειγμα, έκδοση 2.04.0(1)).
  4. COLUMNS—Ο αριθμός των χαρακτήρων ανά γραμμή στην οθόνη σας (για παράδειγμα, 80).
  5. HOSTNAME—Το όνομα του υπολογιστή. Σε ορισμένες εκδόσεις του Linux, αυτό μπορεί να είναι το όνομα του μηχανήματος. Σε άλλα, μπορεί να είναι ένα πλήρως αναγνωρισμένο όνομα τομέα.
  6. HOSTTYPE—Τύπος υπολογιστή.
  7. HOME—Το όνομα του αρχικού καταλόγου σας.
  8. OSTYPE—Το όνομα του λειτουργικού συστήματος.
  9. PATH—Λίστα διαδρομών αναζήτησης διαχωρισμένη με άνω και κάτω τελεία για να βρείτε μια εντολή προς εκτέλεση.
  10. PPID—Το αναγνωριστικό διεργασίας της γονικής διαδικασίας του κελύφους.
  11. PROMPT_COMMAND—Εντολή εκτέλεσης πριν από τη ρύθμιση της κύριας συμβολοσειράς εντολών PS1.
  12. PWD—Ο τρέχων κατάλογος εργασίας (όπως ορίζεται από την εντολή cd).
  13. RANDOM—Επιστρέφει έναν τυχαίο αριθμό μεταξύ 0 και 32767 κάθε φορά που αναφέρεται.
  14. SHELL—Το προτιμώμενο κέλυφος για χρήση. για προγράμματα που ξεκινούν ένα κέλυφος για εσάς.
  15. TERM—Ο τύπος εξομοίωσης τερματικού (για παράδειγμα, κονσόλα).

Ο κανόνας του διαχωρισμού των λέξεων.

LEVEL=0
printf "%i" $LEVEL
0

AND

LEVEL=”0”
printf "%i" $LEVEL
0

Και στις δύο περιπτώσεις, η έξοδος παραμένει ίδια. Ποια είναι λοιπόν η διαφορά στο αποτέλεσμα κατά τη χρήση της προσφοράς;

Ας ελέγξουμε το ίδιο με διαφορετικά δεδομένα μεταβλητών.

LEVEL=0 ; 1 ; 2 ; 3 ; 4 ; 5
bash: 1: command not found 
bash: 2: command not found 
bash: 3: command not found 
bash: 4: command not found 
bash: 5: command not found
printf "%i" $LEVEL
0

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

LEVEL=”0 ; 1 ; 2 ; 3 ; 4 ; 5”
printf "%s" $LEVEL 
0;1;2;3;4;5

Και πάλι το αποτέλεσμα δεν είναι σωστό. Το BASH πήρε τις τιμές της μεταβλητής και αφαίρεσε όλα τα κενά μεταξύ τους. Ως εκ τούτου, το printf δεν ερμήνευσε το 0,1,2,3,4,5 ως διακριτές τιμές. Ποια είναι λοιπόν η λύση;

printf "%s" "$LEVEL" 
0 ; 1 ; 2 ; 3 ; 4 ; 5

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

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

LEVEL=5 
FLAG_MESSAGE="I HAVE CLEARED LEVEL""$LEVEL"". I Deserve appreciation." 
printf “%s” “$FLAG_MESSAGE”
“I HAVE CLEARED LEVEL5. I Deserve appreciation.”

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

LEVEL=5

FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

printf “%s” "$FLAG_MESSAGE" 
“I HAVE CLEARED LEVEL 5. I Deserve appreciation.”

Τα μεμονωμένα εισαγωγικά περιορίζουν το BASH από την εκτύπωση ειδικών χαρακτήρων.

printf “%s” '$FLAG_MESSAGE'
“$FLAG_MESSAGE”

The Backslash (/)

Η ανάστροφη κάθετο λειτουργεί σαν ένα απόσπασμα για έναν χαρακτήρα. Έχετε σκεφτεί πώς θα εκτυπώσετε ();

printf "%c" "\""

Όταν το %q ομαδοποιείται με printf, παρέχει ανάστροφη κάθετο μετά από κάθε λέξη για να διασφαλίσει την απόσταση των λέξεων.

LEVEL=5

FLAG_MESSAGE="I HAVE CLEARED LEVEL ${LEVEL}. I Deserve appreciation." 

printf “%q” "$FLAG_MESSAGE" 
“I\ HAVE\ CLEARED\ LEVEL\ 5.\ I\ Deserve\ appreciation.”

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

Μέχρι τότε, Μείνετε συντονισμένοι και συνδεδεμένοι στο linux-console.net. Μην ξεχάσετε να μας δώσετε τα πολύτιμα σχόλιά σας στην παρακάτω ενότητα σχολίων.