M. Garrels. Οδηγός Bash. Μεταβλητές. Πώς να ορίσετε και να απενεργοποιήσετε μεταβλητές περιβάλλοντος, τοπικού χρήστη και συστήματος στο Linux Πώς να βρείτε πού είναι γραμμένη μια μεταβλητή φλοιού

Μεταβλητοί τύποι

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

Καθολικές μεταβλητές

Οι καθολικές ή οι μεταβλητές περιβάλλοντος είναι διαθέσιμες σε όλα τα κελύφη. Για να εμφανίσετε μεταβλητές περιβάλλοντος, μπορείτε να χρησιμοποιήσετε τις εντολές envή printenv. Αυτές οι εντολές παρέχονται ως μέρος του πακέτου sh-utils.

Παρακάτω είναι μια τυπική έξοδος:

Franky ~> printenv CC=gcc CDPATH=.:~:/usr/local:/usr:/ CFLAGS=-O2 -fomit-frame-pointer COLORTERM=gnome-terminal CXXFLAGS=-O2 -fomit-frame-pointer DISPLAY=: 0 domain = hq.garrels.be e = tor = vi fcedit = vi fignore = .o: ~ g_broken_filenames = 1 gdk_use_xft = 1 gdmsession = default gnome_desktop_session_id = default gtk_rc_files =/etc/gtk/gtk: -1.2-gnome2 GWMCOLOR=σκούρο πράσινο GWMTERM=xterm HISTFILESIZE=5000 history_control=παράβλεψη HISTSIZE=2000 HOME=/nethome/franky HOSTNAME=octarine.hq.garrels.be INPUTRCnNAME/etc/etc j2sdk1.4.0 LANG=en_US LDFLAGS=-s LD_LIBRARY_PATH=/usr/lib/mozilla:/usr/lib/mozilla/plugins LESSCHARSET=latin1 LESS=-edfMQ LESSOPEN=|/usr/bin/lesspipe.f=% LOCAL_MACHINE=octarine LOGNAME=ειλικρινής LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd= 40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*. com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz= 01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01; 31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31: *.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*. tif=01;35: MACHINES=octarine MAILCHECK=60 MAIL=/var/mail/franky MANPATH=/usr/man:/usr/share/man/:/usr/local/man:/usr/X11R6/man MEAN_MACHINES= octarine MOZ_DIST_BIN=/usr/lib/mozilla MOZILLA_FIVE_HOME=/usr/lib/mozilla MOZ_PROGRAM=/usr/lib/mozilla/mozilla-bin MTOOLS_FAT_COMPATIBILITY=1 MYMALLOC=0 NNTPLUNTPGINTHPAXER=0 NNTPLUNTPGINTHPS_ns 4 plugin/: / usr/lib/netscape/plugins OLDPWD=/nethome/franky OS=Linux PAGER=λιγότερο PATH=/nethome/franky/bin.Linux:/nethome/franky/bin:/usr/local/bin:/usr/local/ sbin :/usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin:. PS1=\[\033franky βρίσκεται στο \w\[\033 PS2=Περισσότερα εισαγωγή> PWD=/nethome/franky SESSION_MANAGER=local/octarine.hq.garrels.be:/tmp/.ICE-unix/22106 SHELL=/bin /bash shell_login =-Σύνδεση shlvl = 2 ssh_agent_pid = 22161 ssh_askpass =/usr/libexec/openssh/gnome-ssh-askpass ssh_auth_sock =/tmp/ssh-xxmhq4fc/agent.22106 start_wm = TWM = ειλικρινής USER=franky _=/usr/bin/printenv VISUAL=vi WINDOWID=20971661 XAPPLRESDIR=/nethome/franky/app-defaults XAUTHORITY=/nethome/franky/.Xauthority XENVIRONMENT. /X11R6/lib/X11/%L/%T/%N%C%S:/usr/X11R6/lib/X11/%l/%T/%N%C%S:/usr/X11R6/lib/X11 /%T/%N%C%S:/usr/X11R6/lib/X11/%L/%T/%N%S:/usr/X11R6/lib/X11/%l/%T/%N%S :/usr/X11R6/lib/X11/%T/%N%S XKEYSYMDB=/usr/X11R6/lib/X11/XKeysymDB XMODIFIERS=@im=κανένα XTERMID= XWINHOME=/usr/X11R6 X=X11R6 YACC= y

Τοπικές μεταβλητές

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

Παρακάτω είναι το αρχείο diff που δημιουργήθηκε συγκρίνοντας τα αποτελέσματα των εντολών printenvΚαι σειρά, αφού αφαιρέσετε από τη λίστα των συναρτήσεων που εμφανίζονται επίσης από την εντολή σειρά:

Franky ~> diff set.sorted printenv.sorted | grep"<" | awk "{ print $2 }" BASE=/nethome/franky/.Shell/hq.garrels.be/octarine.aliases BASH=/bin/bash BASH_VERSINFO=(="2" BASH_VERSION="2.05b.0(1)-release" COLUMNS=80 DIRSTACK=() DO_FORTUNE= EUID=504 GROUPS=() HERE=/home/franky HISTFILE=/nethome/franky/.bash_history HOSTTYPE=i686 IFS=$" LINES=24 MACHTYPE=i686-pc-linux-gnu OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PIPESTATUS=(="0") PPID=10099 PS4="+ PWD_REAL="pwd SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor THERE=/home/franky UID=504

Διαίρεση μεταβλητών με το περιεχόμενό τους

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

  • Μεταβλητές συμβολοσειράς
  • Ακέραιες μεταβλητές
  • Μεταβλητές - σταθερές
  • Μεταβλητές - πίνακες

Θα συζητήσουμε αυτούς τους τύπους μεταβλητών στο Κεφάλαιο 10. Τώρα θα χρησιμοποιήσουμε ακέραιες τιμές και τιμές συμβολοσειρών στις μεταβλητές μας.

Δημιουργία μεταβλητών

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

Prompt> export 1number=1 bash: export: `1number=1": δεν είναι έγκυρο αναγνωριστικό

Για να ορίσετε μια μεταβλητή στο κέλυφος εντολών, χρησιμοποιήστε την ακόλουθη εντολή

VARNAME="τιμή"

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

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

Franky ~> MYVAR1="2" franky ~> echo $MYVAR1 2 franky ~> first_name="Franky" franky ~> echo $first_name Franky franky ~> full_name="Franky M. Singh" franky ~> echo $full_name Franky M. Singh franky ~> MYVAR-2="2" bash: MYVAR-2=2: η εντολή δεν βρέθηκε ειλικρινής ~> MYVAR1 ="2" bash: MYVAR1: η εντολή δεν βρέθηκε ειλικρινής ~> MYVAR1 = "2" bash: 2: εντολή δεν βρέθηκε ειλικρινής ~> unset MYVAR1 first_name πλήρες_όνομα ειλικρινής ~> echo $MYVAR1 $first_name $full_name<--no output-->ειλικρινής ~>

Εξαγωγή μεταβλητών

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

Εξαγωγή VARNAME="value"

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

Franky ~> full_name="Franky M. Singh" franky ~> bash franky ~> echo $full_name franky ~> exit franky ~> export full_name franky ~> bash franky ~> echo $full_name Franky M. Singh franky ~> export full_name= "Charles the Great" franky ~> echo $full_name Charles the Great franky ~> exit franky ~> echo $full_name Franky M. Singh franky ~>

Την πρώτη φορά που ένα υποκέλυφος επιχειρεί να διαβάσει την τιμή του full_name , η τιμή δεν ορίζεται (εντολή ηχώδείχνει μια κενή γραμμή). Μετά την έξοδο από το υποκέλυφος, η μεταβλητή full_name εξάγεται στο γονικό κέλυφος - η μεταβλητή μπορεί να εξαχθεί αφού της έχει εκχωρηθεί μια τιμή. Στη συνέχεια ξεκινά ένα νέο υποκέλυφος, εμφανίζοντας τη μεταβλητή που εξάγεται από το γονικό κέλυφος. Η μεταβλητή τροποποιείται και μια διαφορετική τιμή θα αποθηκευτεί σε αυτήν, αλλά στο γονικό κέλυφος η τιμή αυτής της μεταβλητής παραμένει η ίδια.

Δεσμευμένες μεταβλητές

Bourne Reserved Shell Variables

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

Πίνακας 3.1. Bourne Reserved Shell Variables

Όνομα μεταβλητής Ορισμός

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

Αρχική σελίδα τρέχων χρήστης; χρησιμοποιείται από προεπιλογή στην ενσωματωμένη εντολή CD. Η τιμή αυτής της μεταβλητής χρησιμοποιείται επίσης αντί του χαρακτήρα tilde.

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

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

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

Η τιμή του τελευταίου ορίσματος στην παράμετρο που επεξεργάζεται η ενσωματωμένη εντολή παίρνει.

Ευρετήριο του τελευταίου ορίσματος παραμέτρου που επεξεργάζεται η ενσωματωμένη εντολή παίρνει.

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

Κύρια γραμμή εντολών. Η προεπιλεγμένη τιμή είναι ""\s-\v\$ "".

Δευτερεύουσα γραμμή εντολών. Η προεπιλεγμένη τιμή είναι ""> "".

Δεσμευμένες μεταβλητές Bash

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

Πίνακας 3.2. Δεσμευμένες μεταβλητές Bash

Όνομα μεταβλητής Ορισμός

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

Πλήρης διαδρομή που χρησιμοποιείται για την έναρξη της τρέχουσας παρουσίας του Bash.

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

Ο αριθμός έκδοσης της τρέχουσας παρουσίας του Bash.

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

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

Ένας δείκτης σε $(COMP_WORDS) στη λέξη που αποθηκεύει την τρέχουσα θέση του δρομέα.

Τρέχουσα γραμμή εντολών.

Ένας δείκτης στην τρέχουσα θέση του δρομέα σε σχέση με την έναρξη της τρέχουσας εντολής.

Η μεταβλητή είναι ένας πίνακας που αποτελείται από μεμονωμένες λέξεις που χρησιμοποιούνται στην τρέχουσα γραμμή εντολών.

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

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

Αριθμητικό ενεργό αναγνωριστικό χρήστη Το αναγνωριστικό του τρέχοντος χρήστη.

Ο προεπιλεγμένος επεξεργαστής που χρησιμοποιείται όταν υπάρχει ενσωματωμένη εντολή fcκαθορίζεται η παράμετρος -e

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

Το όνομα της συνάρτησης φλοιού που εκτελείται αυτήν τη στιγμή.

Μια λίστα μοτίβων διαχωρισμένη με άνω και κάτω τελεία που ορίζει ένα σύνολο ονομάτων αρχείων που πρέπει να αγνοηθούν κατά την αντικατάσταση ονομάτων αρχείων.

Η μεταβλητή είναι ένας πίνακας που περιέχει μια λίστα ομάδων στις οποίες ανήκει ο τρέχων χρήστης.

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

Ο αριθμός της τρέχουσας εντολής στο ιστορικό εντολών ή το ευρετήριό της στη λίστα ιστορικού εντολών.

Καθορίζει εάν η εντολή θα προστεθεί στο αρχείο ιστορικού εντολών.

Το όνομα του αρχείου στο οποίο είναι αποθηκευμένο το ιστορικό εντολών. Προεπιλεγμένη τιμή: ~/.bash_history.

Ο προεπιλεγμένος μέγιστος αριθμός γραμμών που περιέχονται σε ένα αρχείο ιστορικού εντολών είναι 500.

Μια λίστα μοτίβων διαχωρισμένη με άνω και κάτω τελεία που καθορίζει εάν μια εντολή πρέπει να αποθηκευτεί σε λίστες ιστορικού εντολών.

Ο προεπιλεγμένος μέγιστος αριθμός εντολών που μπορούν να αποθηκευτούν στη λίστα ιστορικού εντολών είναι 500.

Περιέχει ένα όνομα αρχείου στην ίδια μορφή με το αρχείο /etc/hosts, το οποίο μπορεί να διαβαστεί όταν το κέλυφος εντολών χρειάζεται να συμπληρώσει το όνομα κεντρικού υπολογιστή.

Τρέχον όνομα κεντρικού υπολογιστή.

Μια συμβολοσειρά που περιγράφει το μηχάνημα στο οποίο λειτουργεί το Bash.

Ελέγχει τι κάνει το κέλυφος όταν λαμβάνει έναν χαρακτήρα ως τερματικό χαρακτήρα μιας ροής εισόδου ΕΟΦ(σύμβολο τέλους αρχείου).

Το όνομα του αρχείου προετοιμασίας προγράμματος Readline που αντικαθιστά το προεπιλεγμένο αρχείο /etc/inputrc.

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

Αυτή η μεταβλητή υπερισχύει της τιμής της μεταβλητής LANG και όλων των άλλων μεταβλητών που ξεκινούν με τους χαρακτήρες LC_ που καθορίζουν την κατηγορία τοπικής προσαρμογής.

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

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

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

Αυτή η μεταβλητή καθορίζει την κατηγορία τοπικής προσαρμογής για τη μορφή αριθμού.

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

Χρησιμοποιείται από ενσωματωμένη εντολή επιλέγωγια να προσδιορίσετε το μήκος της στήλης στην οποία εμφανίζονται οι επιλεγμένες λίστες.

Μια συμβολοσειρά που περιγράφει πλήρως τον τύπο του συστήματος στο οποίο εκτελείται το Bash, χρησιμοποιώντας την τυπική μορφή GNU CPU-COMPANY-SYSTEM.

Καθορίζει, σε δευτερόλεπτα, πόσο συχνά το κέλυφος πρέπει να ελέγχει για αλληλογραφία σε αρχεία που καθορίζονται στις μεταβλητές MAILPATH ή MAIL.

Σετ προηγούμενου καταλόγου εργασίας με χρήση ενσωματωμένης εντολής CD.

Εάν οριστεί σε 1, το Bash εμφανίζει μηνύματα σφάλματος που δημιουργούνται από την ενσωματωμένη εντολή παίρνει.

Περιγραφή συμβολοσειράς λειτουργικό σύστημα, που τρέχει το Bash.

Η μεταβλητή είναι ένας πίνακας που περιέχει μια λίστα τιμών κατάστασης εξόδου διεργασίας στον τελευταίο αγωγό (η ​​οποία μπορεί να αποτελείται από μία μόνο εντολή).

Εάν αυτή η μεταβλητή προστεθεί στο περιβάλλον κατά την εκκίνηση του bash, το κέλυφος μεταβαίνει σε λειτουργία POSIX.

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

Η τιμή αυτής της μεταβλητής χρησιμοποιείται για την εντολή επιλέγωως συμβολοσειρά προτροπής. Προκαθορισμένο - ""#? ""

Η τιμή της συμβολοσειράς προτροπής που εκδίδεται πριν από τη γραμμή εντολών όταν η επιλογή -x έχει οριστεί να ενεργοποιεί την ηχώ γραμμή εντολών; η προεπιλογή είναι ""+ "".

Ο τρέχων κατάλογος εργασίας ορίζεται από την ενσωματωμένη εντολή CD.

Κάθε φορά που γίνεται πρόσβαση σε αυτήν την παράμετρο, δημιουργείται ένας τυχαίος ακέραιος αριθμός στην περιοχή από 0 έως 32767. Η τιμή αυτής της μεταβλητής χρησιμοποιείται σε γεννήτριες τυχαίων αριθμών.

Προεπιλεγμένη μεταβλητή στην ενσωματωμένη εντολή ανάγνωση.

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

Λίστα παραμέτρων που έχουν οριστεί στο κέλυφος εντολών. χωρίζονται με άνω και κάτω τελεία.

Αυξάνονται κατά μία κάθε φορά που ξεκινά μια νέα παρουσία του Bash.

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

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

Αριθμητική τιμή, πραγματικό αναγνωριστικό χρήστη για τον τρέχοντα χρήστη.

Ανατρέξτε στις σελίδες man ή την τεκμηρίωση του Bash για περισσότερες πληροφορίες. Ορισμένες μεταβλητές είναι μόνο για ανάγνωση, κάποιες ορίζονται αυτόματα και κάποιες γίνονται άνευ σημασίας όταν ορίζονται σε κάτι διαφορετικό από την προεπιλεγμένη τιμή τους.

Ειδικές παράμετροι

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

Πίνακας 3.3. Ειδικές μεταβλητές Bash

Σύμβολο Ορισμός

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

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

Επιστρέφει τον αριθμό των παραμέτρων θέσης που καθορίζονται ως δεκαδική τιμή.

Επιστρέφει τον κωδικό επιστροφής του τελευταίου αγωγού που εκτελέστηκε σε λειτουργία προσκηνίου.

Η παράμετρος παύλα επιστρέφει τις σημαίες της τρέχουσας παραμέτρου όπως είχαν οριστεί όταν κλήθηκε η ενσωματωμένη εντολή σειρά, ή όπως ορίστηκαν από το ίδιο το κέλυφος (για παράδειγμα, -i).

Επιστρέφει το αναγνωριστικό διεργασίας φλοιού.

Επιστρέφει το αναγνωριστικό διεργασίας της τελευταίας εντολής που εκτελέστηκε στη λειτουργία παρασκηνίου (ασύγχρονη).

Επιστρέφει το όνομα του κελύφους ή του σεναρίου.

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

Οι παράμετροι θέσης είναι οι λέξεις που ακολουθούν το όνομα του σεναρίου φλοιού. Αποθηκεύονται στις μεταβλητές $1, $2, $3 και ούτω καθεξής. Οι μεταβλητές προστίθενται στον εσωτερικό πίνακα όπως απαιτείται. Η μεταβλητή $# καθορίζει τον συνολικό αριθμό παραμέτρων, όπως φαίνεται στο ακόλουθο απλό σενάριο:

# positional.sh # Αυτό το σενάριο διαβάζει 3 παραμέτρους θέσης και τις εκτυπώνει. POSPAR1="$1" POSPAR2="$2" POSPAR3="$3" ηχώ "$1 είναι η πρώτη παράμετρος θέσης, \$1." echo "$2 είναι η δεύτερη παράμετρος θέσης, \$2." echo "$3 είναι η τρίτη παράμετρος θέσης, \$3." echo echo "Ο συνολικός αριθμός των παραμέτρων θέσης είναι $#."

Κατά την εκτέλεση του σεναρίου, μπορείτε να καθορίσετε οποιονδήποτε αριθμό ορισμάτων:

Franky ~> positional.sh ένα δύο τρία τέσσερα πέντε ένα είναι η πρώτη παράμετρος θέσης, $1. δύο είναι η δεύτερη παράμετρος θέσης, $2. τρία είναι η τρίτη παράμετρος θέσης, $3. Ο συνολικός αριθμός των παραμέτρων θέσης είναι 5. ειλικρινής ~> positional.sh ένα δύο ένα είναι η πρώτη παράμετρος θέσης, $1. δύο είναι η δεύτερη παράμετρος θέσης, $2. είναι η τρίτη παράμετρος θέσης, $3. Ο συνολικός αριθμός παραμέτρων θέσης είναι 2.

Για περισσότερες πληροφορίες σχετικά με τη χρήση αυτών των παραμέτρων, ανατρέξτε στο Κεφάλαιο 7, Δηλώσεις υπό όρους και στην ενότητα για την ενσωματωμένη εντολή shift.

Μερικά παραδείγματα άλλων ειδικών παραμέτρων:

Franky ~> grep λεξικό /usr/share/dict/words λεξικό franky ~> echo $_ /usr/share/dict/words franky ~> echo $$ 10662 franky ~> mozilla & 11064 franky ~> echo $! 11064 franky ~> echo $0 bash franky ~> echo $? 0 franky ~> ls does nototexist ls: does nototexist: Δεν υπάρχει τέτοιο αρχείο ή κατάλογος franky ~> echo $? 1 ειλικρινής ~>

Χρήστης ειλικρινήςξεκινάει εισάγοντας την εντολή grep, που εκχωρεί την τιμή στη μεταβλητή _ . Το αναγνωριστικό διεργασίας αυτού του φλοιού είναι 10662. Εάν η εκτέλεση κάποιας εργασίας μεταφερθεί σε λειτουργία φόντου, σε μεταβλητή! θα υπάρχει ένα αναγνωριστικό διαδικασίας εργασία στο παρασκήνιο. Ένα λειτουργικό κέλυφος εντολών είναι βίαιο χτύπημα. Αν έγινε λάθος, στη μεταβλητή; θα υπάρχει ένας κωδικός επιστροφής διαφορετικός από το 0 (μηδέν).

Επέκταση του πεδίου εφαρμογής των σεναρίων που έχουν μεταβλητές

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

#!/bin/bash # Αυτό το σενάριο δημιουργεί αντίγραφο ασφαλείας του αρχικού καταλόγου μου. cd /home # Αυτό δημιουργεί το αρχείο tar cf /var/tmp/home_franky.tar franky > /dev/null 2>&1 # Πρώτα αφαιρέστε το παλιό αρχείο bzip2. Σφάλματα ανακατεύθυνσης επειδή αυτό δημιουργεί ορισμένα εάν το αρχείο # δεν υπάρχει. Στη συνέχεια, δημιουργήστε ένα νέο συμπιεσμένο αρχείο. rm /var/tmp/home_franky.tar.bz2 2> /dev/null bzip2 /var/tmp/home_franky.tar # Αντιγράψτε το αρχείο σε άλλο κεντρικό υπολογιστή - διαθέτουμε κλειδιά ssh για την εκτέλεση αυτής της εργασίας χωρίς παρέμβαση. scp /var/tmp/home_franky.tar.bz2 bordeaux:/opt/backup/franky > /dev/null 2>&1 # Δημιουργήστε μια χρονική σήμανση σε ένα αρχείο καταγραφής. ημερομηνία >> /home/franky/log/home_backup.log Η δημιουργία αντιγράφων ασφαλείας echo πέτυχε >> /home/franky/log/home_backup.log

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

#!/bin/bash # Αυτό το σενάριο δημιουργεί αντίγραφο ασφαλείας του αρχικού καταλόγου μου. # Αλλάξτε τις τιμές των μεταβλητών για να κάνετε το σενάριο να λειτουργεί για εσάς: BACKUPDIR=/home BACKUPFILES=franky TARFILE=/var/tmp/home_franky.tar BZIPFILE=/var/tmp/home_franky.tar.bz2 SERVER=bordeaux REMOTEDIR =/ opt/backup/franky LOGFILE=/home/franky/log/home_backup.log cd $BACKUPDIR # Αυτό δημιουργεί το αρχείο tar cf $TARFILE $BACKUPFILES > /dev/null 2>&1 # Καταργήστε πρώτα το παλιό αρχείο bzip2. Σφάλματα ανακατεύθυνσης επειδή αυτό δημιουργεί ορισμένα εάν το αρχείο # δεν υπάρχει. Στη συνέχεια, δημιουργήστε ένα νέο συμπιεσμένο αρχείο. rm $BZIPFILE 2> /dev/null bzip2 $TARFILE # Αντιγράψτε το αρχείο σε άλλο κεντρικό υπολογιστή - διαθέτουμε κλειδιά ssh για την εκτέλεση αυτής της εργασίας χωρίς παρέμβαση. scp $BZIPFILE $SERVER:$REMOTEDIR > /dev/null 2>&1 # Δημιουργήστε μια χρονική σήμανση σε ένα αρχείο καταγραφής. ημερομηνία >> $LOGFILE το αντίγραφο ασφαλείας echo πέτυχε >> $LOGFILE

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

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

Αυτό το σεμινάριο εξηγεί πώς να αλληλεπιδράσετε με το περιβάλλον και να διαβάζετε ή να ορίζετε μεταβλητές περιβάλλοντος και φλοιού διαδραστικά και χρησιμοποιώντας αρχεία ρυθμίσεων. Όλες οι ενέργειες εκτελούνται σε Ubuntu 12.04 VPS, αλλά κάθε σύγχρονη Διανομή Linuxπρέπει να λειτουργεί με τον ίδιο τρόπο.

Πώς λειτουργεί το περιβάλλον και οι μεταβλητές του

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

Γενικά, το περιβάλλον παρέχει μια διευκόλυνση μετάδοσης που συλλέγει και θέτει τις απαραίτητες ρυθμίσεις στη διαδικασία του κελύφους, η οποία με τη σειρά της τις μεταβιβάζει στις θυγατρικές διεργασίες του.

Το περιβάλλον έχει τη μορφή συμβολοσειράς που περιέχει ζεύγη κλειδιών-τιμών. Πολλαπλές τιμές διαχωρίζονται συνήθως με άνω και κάτω τελεία (:). Κάθε ζευγάρι μοιάζει γενικά κάπως έτσι:

KEY=value1:value2:...

Εάν η τιμή περιέχει κενά, πρέπει να χρησιμοποιήσετε διπλά εισαγωγικά:

KEY="τιμή με κενά"

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

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

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

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

Μεταβλητές κελύφους εκτύπωσης και περιβάλλοντος

Κάθε συνεδρία παρακολουθεί τις δικές της μεταβλητές φλοιού και περιβάλλοντος. Υπάρχουν διάφοροι τρόποι για να τα βγάλετε.

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

printenv
SHELL=/bin/bash
TERM=xterm
ΧΡΗΣΤΗΣ=αποκαθηλωτής
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd= 40;33;01:or=40;31;01:su=37;41:sg=30;43:ca:...
MAIL=/var/mail/demouser
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/home/demouser
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/demouser
LOGNAME=demouser
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/printenv

Αυτό είναι ένα τυπικό παράδειγμα της εξόδου των εντολών printenv και env. Αυτές οι εντολές διαφέρουν μόνο σε μερικές μεμονωμένες συναρτήσεις. Για παράδειγμα, το printenv μπορεί να ρωτήσει τις τιμές μεμονωμένων μεταβλητών:

printenv SHELL
/bin/bash

Η εντολή env σάς επιτρέπει να αλλάξετε το περιβάλλον στο οποίο εκτελούνται τα προγράμματα περνώντας ένα σύνολο ορισμών μεταβλητών στην εντολή, κάπως έτσι:

env VAR1="blahblah" command_to_run command_options

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

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

Πώς βλέπετε όμως τις μεταβλητές φλοιού;

Για να το κάνετε αυτό, χρησιμοποιήστε την εντολή set. Όταν εισάγεται χωρίς πρόσθετες παραμέτρους, το set εμφανίζει όλες τις μεταβλητές φλοιού, τις μεταβλητές περιβάλλοντος, τις τοπικές μεταβλητές και τις συναρτήσεις φλοιού:

σειρά
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
. . .

Κατά κανόνα, αυτή η λίστα είναι αρκετά μεγάλη. Για να το εμφανίσετε σε πιο βολική μορφή, ανοίξτε το χρησιμοποιώντας ένα πρόγραμμα τηλεειδοποίησης:

Αυτή η λίστα περιέχει έναν τεράστιο αριθμό Επιπλέον πληροφορίες, που είναι μέσα αυτή τη στιγμήδεν χρειάζεται (για παράδειγμα, ορισμένες λειτουργίες bash).

Για να "καθαρίσετε" την έξοδο, πρέπει να εκτελέσετε την εντολή set σε λειτουργία POSIX, η οποία παρακάμπτει τις λειτουργίες του κελύφους. Αυτό πρέπει να γίνει σε ένα υποκέλυφος για να μην αλλάξει το τρέχον περιβάλλον:

(σύνολο -o posix; σύνολο)

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

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

comm -23<(set -o posix; set | sort) <(env | sort)

Η λίστα πιθανότατα θα περιέχει πολλές μεταβλητές περιβάλλοντος επειδή η εντολή set εκτυπώνει τιμές σε εισαγωγικά, αλλά οι εντολές printenv και env όχι.

Ωστόσο, αυτός είναι ένας πολύ καλός τρόπος για να δείτε το περιβάλλον και τις μεταβλητές φλοιού που έχουν οριστεί σε μια δεδομένη περίοδο λειτουργίας.

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

Βασικές μεταβλητές περιβάλλοντος και κελύφους

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

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

  • ΚΕΛΥΦΟΣ: Περιγράφει το κέλυφος που ερμηνεύει τις εισαγόμενες εντολές. Στις περισσότερες περιπτώσεις, το bash εγκαθίσταται από προεπιλογή, αλλά αυτή η τιμή μπορεί να αλλάξει εάν είναι απαραίτητο.
  • ΟΡΟΣ: Καθορίζει τον τύπο του τερματικού που προσομοιώνεται κατά την εκκίνηση του κελύφους. Ανάλογα με τις λειτουργικές απαιτήσεις, μπορούν να εξομοιωθούν διαφορετικά τερματικά υλικού. Συνήθως δεν χρειάζεται να ανησυχείτε για αυτό.
  • ΧΡΗΣΤΗΣ: τρέχων χρήστης.
  • P.W.D.: τρέχων κατάλογος εργασίας.
  • OLDPWD: προηγούμενος κατάλογος εργασίας. Το κέλυφος το αποθηκεύει σε περίπτωση που εκτελεστεί η εντολή cd -.
  • LS_ΧΡΩΜΑΤΙΣΤΑ: Καθορίζει τους χρωματικούς κωδικούς που χρησιμοποιούνται για τον χρωματισμό της εξόδου της εντολής ls. Αυτή η έξοδος βοηθά τον χρήστη να διαβάσει το αποτέλεσμα της εντολής πιο γρήγορα (για παράδειγμα, να διακρίνει γρήγορα τους τύπους αρχείων).
  • ΤΑΧΥΔΡΟΜΕΙΟ: Διαδρομή προς το τρέχον γραμματοκιβώτιο του χρήστη.
  • ΜΟΝΟΠΑΤΙ: Μια λίστα καταλόγων στους οποίους έχει πρόσβαση το σύστημα κατά την εκτέλεση εντολών. Όταν ο χρήστης εκτελεί την εντολή, το σύστημα ελέγχει αυτούς τους καταλόγους με την καθορισμένη σειρά για το εκτελέσιμο αρχείο.
  • LANG: Τρέχουσες ρυθμίσεις γλώσσας και τοπικής προσαρμογής, συμπεριλαμβανομένης της κωδικοποίησης χαρακτήρων.
  • ΣΠΙΤΙ: Ο αρχικός κατάλογος του τρέχοντος χρήστη.
  • _ : Εκτελέστηκε η τελευταία εντολή.

Αφού ελέγξετε τη λίστα με τις μεταβλητές περιβάλλοντος, εξετάστε τη λίστα των μεταβλητών φλοιού:

  • BASHOPTS: Λίστα επιλογών που χρησιμοποιούνται κατά την εκτέλεση του bash. Αυτό μπορεί να χρησιμοποιηθεί για να ελέγξει εάν το περιβάλλον λειτουργεί όπως αναμένεται.
  • ΒΙΑΙΟ ΧΤΥΠΗΜΑ_ΕΚΔΟΧΗ: Η τρέχουσα έκδοση του bash σε αναγνώσιμη από τον άνθρωπο μορφή.
  • ΒΙΑΙΟ ΧΤΥΠΗΜΑ_ΠΛΗΡΟΦΟΡΙΕΣ: Μια μηχανικά αναγνώσιμη έκδοση του bash.
  • ΣΤΗΛΕΣ: Καθορίζει το πλάτος της εξόδου σε στήλες.
  • DIRSTACK: Μια στοίβα καταλόγων προσβάσιμων με τις εντολές pushd και popd.
  • HISTFILESIZE: Ο μέγιστος αριθμός γραμμών που περιέχονται στο αρχείο ιστορικού εντολών.
  • HISTSIZE: Ο αριθμός των εντολών που πρέπει να απομνημονεύονται στη λίστα ιστορικού.
  • HOSTNAME: Τρέχον όνομα κεντρικού υπολογιστή.
  • IFS:Εσωτερικό διαχωριστικό πεδίου εισαγωγής στη γραμμή εντολών. Η προεπιλογή είναι το διάστημα.
  • ΥΓ1: Καθορίζει την αρχική γραμμή εντολών - τον τύπο της γραμμής εντολών κατά την έναρξη μιας περιόδου λειτουργίας φλοιού. Η μεταβλητή PS2 ορίζει τη δευτερεύουσα γραμμή εντολών εάν η εντολή εκτείνεται σε πολλές γραμμές.
  • SHELLOPTS: Επιλογές κελύφους που μπορούν να ρυθμιστούν χρησιμοποιώντας το set.
  • UID: Μοναδικό αναγνωριστικό για τον τρέχοντα χρήστη.

Ρύθμιση μεταβλητών κελύφους και περιβάλλοντος

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

Δημιουργία μεταβλητών κελύφους

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

TEST_VAR="Γεια σου Κόσμε!"

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

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

Για να το επιβεβαιώσετε, χρησιμοποιήστε την εντολή grep στο αποτέλεσμα της εντολής set:

σετ | grep TEST_VAR
TEST_VAR="Γεια σου Κόσμε!"

Μπορείτε επίσης να βεβαιωθείτε ότι αυτή η μεταβλητή δεν είναι μεταβλητή περιβάλλοντος εκτελώντας το grep στο αποτέλεσμα της εντολής printenv:

printenv | grep TEST_VAR

Αυτή η ενέργεια δεν θα παράγει κανένα αποτέλεσμα.

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

ηχώ $TEST_VAR
Γειά σου Κόσμε!

Όπως μπορείτε να δείτε, για να αποκτήσετε πρόσβαση στην τιμή μιας μεταβλητής, πρέπει να χρησιμοποιήσετε το σύμβολο $.

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

βίαιο χτύπημα
ηχώ $TEST_VAR

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

Για να επιστρέψετε στο αρχικό σας κέλυφος, πληκτρολογήστε exit:

Δημιουργία μεταβλητών περιβάλλοντος

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

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

printenv | grep TEST_VAR
TEST_VAR=Γεια Κόσμε!

Τώρα αυτή η μεταβλητή εμφανίζεται σε αυτήν τη λίστα. Μπορείτε επίσης να επεκτείνετε ξανά το παιδικό κέλυφος:

βίαιο χτύπημα
ηχώ $TEST_VAR
Γειά σου Κόσμε!

Εξαιρετική! Το θυγατρικό κέλυφος έλαβε μια μεταβλητή από το αρχικό κέλυφος. Δοκιμάστε να εξαγάγετε μια ακόμη μεταβλητή πριν φύγετε από το θυγατρικό κέλυφος.

εξαγωγή NEW_VAR="Δοκιμή εξαγωγής"

Ελέγξτε εάν η μεταβλητή έχει εξαχθεί:

printenv | grep NEW_VAR
NEW_VAR=Δοκιμή εξαγωγής

Τώρα επιστρέψτε στο αρχικό σας κέλυφος:

Ελέγξτε εάν αυτή η μεταβλητή μπορεί να ανοίξει:

Το αποτέλεσμα δεν επιστρέφεται

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

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

Μετακίνηση και επαναφορά μεταβλητών

Η μεταβλητή TEST_VAR εξακολουθεί να είναι μεταβλητή περιβάλλοντος. Για να την κάνετε ξανά μεταβλητή φλοιού, πληκτρολογήστε:

εξαγωγή -n TEST_VAR

Τώρα αυτή η μεταβλητή δεν είναι πλέον μεταβλητή περιβάλλοντος:

printenv | grep TEST_VAR

Αυτή είναι και πάλι μια μεταβλητή φλοιού:

σετ | grep TEST_VAR
TEST_VAR="Γεια σου Κόσμε!"

Για να επαναφέρετε πλήρως μια μεταβλητή, είτε πρόκειται για μεταβλητή περιβάλλοντος είτε για μεταβλητή φλοιού, χρησιμοποιήστε την εντολή unset:

Βεβαιωθείτε ότι αυτή η μεταβλητή δεν υπάρχει πλέον:

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

Αυτόματη ρύθμιση μεταβλητών περιβάλλοντος

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

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

Τύποι συνεδριών Shell

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

Μίζα ή αρχικό κέλυφος(κέλυφος σύνδεσης) είναι μια περίοδος λειτουργίας φλοιού που ανοίγει μετά την εξουσιοδότηση χρήστη. Εάν ο χρήστης συνδεθεί σε ένα τερματικό ή πραγματοποιήσει έλεγχο ταυτότητας χρησιμοποιώντας SSH, θα ανοίξει ένα κέλυφος εκκίνησης.

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

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

Διαδραστική συνεδρίαΤο κέλυφος (διαδραστικό κέλυφος) είναι μια συνεδρία συνδεδεμένη με ένα τερματικό. Μια μη διαδραστική περίοδος λειτουργίας φλοιού είναι μια περίοδος λειτουργίας που δεν σχετίζεται με ένα τερματικό.

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

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

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

Έτσι, πρώτα η περίοδος εκκίνησης λαμβάνει τις διαμορφώσεις από το αρχείο /etc/profile. Στη συνέχεια, αναζητά το αρχείο διαμόρφωσης του κελύφους εκκίνησης στον αρχικό κατάλογο του χρήστη για να αποκτήσει διαμορφώσεις που ορίζονται από το χρήστη.

Αυτή η συνεδρία διαβάζει τα αρχεία ~/.bash_profile, ~/.bash_login και ~/.profile και δεν διαβάζει άλλα αρχεία.

Η θυγατρική περίοδος με τη σειρά της διαβάζει το /etc/baash.bashrc και μετά το αρχείο ~/.bash.rc του χρήστη για την ανάπτυξη του περιβάλλοντος.

Τα μη διαδραστικά κελύφη διαβάζουν τη μεταβλητή περιβάλλοντος BASH_ENV και το καθορισμένο αρχείο για να δημιουργήσουν ένα νέο περιβάλλον.

Πώς να ορίσετε μεταβλητές περιβάλλοντος

Όπως μπορείτε να δείτε, οι διαμορφώσεις είναι διάσπαρτες σε διαφορετικά αρχεία.

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

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

Συνήθως, και τα δύο κελύφη χρησιμοποιούν μεταβλητές περιβάλλοντος που ορίζονται από το χρήστη. Αυτό σημαίνει ότι μπορείτε να ορίσετε αυτές τις μεταβλητές στο αρχείο ~/.bashrc.

Ανοίξτε αυτό το αρχείο:

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

εξαγωγή VARNAME=τιμή

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

πηγή ~/.bashrc

Για να ορίσετε μεταβλητές σε όλο το σύστημα, προσθέστε τις στο /etc/profile, /etc/bash.bashrc ή /etc/environment.

Αποτελέσματα

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

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

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

Ετικέτες: ,

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

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

Γενικότερα, μια μεταβλητή περιβάλλοντος μπορεί να είναι τριών τύπων:

1. Τοπικές μεταβλητές περιβάλλοντος

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

2. Προσαρμοσμένες μεταβλητές κελύφους

Αυτές οι μεταβλητές φλοιού στο Linux ορίζονται για έναν συγκεκριμένο χρήστη και φορτώνονται κάθε φορά που ο χρήστης συνδέεται χρησιμοποιώντας ένα τοπικό τερματικό ή συνδέεται εξ αποστάσεως. Τέτοιες μεταβλητές συνήθως αποθηκεύονται σε αρχεία διαμόρφωσης: .bashrc, .bash_profile, .bash_login, .profile ή άλλα αρχεία που βρίσκονται στον κατάλογο χρήστη.

3. Μεταβλητές περιβάλλοντος συστήματος

Αυτές οι μεταβλητές είναι διαθέσιμες σε όλο το σύστημα, για όλους τους χρήστες. Φορτώνονται κατά την εκκίνηση του συστήματος από τα αρχεία διαμόρφωσης συστήματος: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Αρχεία διαμόρφωσης μεταβλητής περιβάλλοντος Linux

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

.bashrc

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

.bash_profile

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

/etc/περιβάλλον

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

/etc/bash.bashrc

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

/etc/profile

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

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

όνομα αρχείου πηγής

Προσθήκη μεταβλητών περιβάλλοντος χρήστη και συστήματος στο Linux

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

var=τιμή
$export var=value

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

Υπάρχουν πολλές εντολές που μπορείτε να χρησιμοποιήσετε για να αφαιρέσετε μεταβλητές περιβάλλοντος:

1. Χρησιμοποιώντας το env

Από προεπιλογή, μπορείτε να χρησιμοποιήσετε το env για να προβάλετε όλες τις καθορισμένες μεταβλητές περιβάλλοντος. Αλλά με την επιλογή -i, σας επιτρέπει να αφαιρέσετε προσωρινά όλες τις μεταβλητές φλοιού και να εκτελέσετε την εντολή χωρίς μεταβλητές.

env –i εντολή

Var είναι οποιαδήποτε μεταβλητή που θέλετε να περάσετε σε αυτήν την εντολή.

Αυτή η εντολή θα ξεκινήσει το κέλυφος χωρίς καθόλου μεταβλητές περιβάλλοντος:

Μετά την εκκίνηση ενός τέτοιου περιβάλλοντος, δεν θα υπάρχουν διαθέσιμες μεταβλητές, αλλά μετά την έξοδο όλα θα επιστρέψουν στη θέση τους.

2. Χρήση απενεργοποίησης

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

unset variable_name

3. Ορίστε την τιμή της μεταβλητής σε ""

Αυτός είναι ο ευκολότερος τρόπος για να αφαιρέσετε μεταβλητές περιβάλλοντος στο Linux· ορίζοντας μια μεταβλητή ως άδεια, την αφαιρείτε για το υπόλοιπο της τρέχουσας περιόδου λειτουργίας.

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

Δημιουργία μεταβλητών περιβάλλοντος χρήστη και συστήματος

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

1. Ορίστε και αφαιρέστε τοπικές μεταβλητές στο Linux

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

VAR1="Χάθηκε"
$ echo $VAR1
$unset VAR1
$ echo $VAR1

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

εξαγωγή VAR="Losst"
$ echo $VAR
$VAR=
$ echo $VAR

Τώρα ας δημιουργήσουμε μια μεταβλητή VAR2 και ας της δώσουμε μια τιμή. Και στη συνέχεια αφαιρέστε προσωρινά όλες τις τοπικές μεταβλητές εκτελώντας το env -i. Θα ξεκινήσει ένα κέλυφος χωρίς μεταβλητές. Μετά την είσοδο στην έξοδο, όλες οι μεταβλητές θα αποκατασταθούν.

VAR2="Χάθηκε"
$ echo $VAR2
$ env -i bash
$ echo $VAR2

Ρύθμιση και κατάργηση μεταβλητών χρήστη

Επεξεργαστείτε το αρχείο .bashrc στον αρχικό σας κατάλογο προσθέτοντας μια εντολή εξαγωγής για να εξαγάγετε την επιθυμητή μεταβλητή. Στη συνέχεια, εκτελέστε την εντολή πηγής για να εφαρμόσετε τις αλλαγές. Ας δημιουργήσουμε, για παράδειγμα, τη μεταβλητή CD:

Προσθέστε αυτήν τη γραμμή (o, μετά επικόλληση, μετά Esc και :wq):

εξαγωγή CD="This is Lost Home"

Τώρα απομένει να ενημερώσετε τη διαμόρφωση:

πηγή.bashrc
$echo $CD

Για να καταργήσετε αυτήν τη μεταβλητή, απλώς αφαιρέστε την από το .bashrc.

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

vi .bash_profile

Προσθέστε τη γραμμή:

εξαγωγή VAR2="Αυτό είναι το χαμένο σπίτι"

Και εκτελέστε αυτές τις εντολές για να εφαρμόσετε τις αλλαγές και ελέγξτε ότι η μεταβλητή έχει προστεθεί:

source.bash_profile
$ echo $VAR2

Η μεταβλητή δεν είναι διαθέσιμη επειδή έχετε δημιουργήσει μια τοπική συνεδρία τερματικού, συνδεθείτε τώρα μέσω ssh:

ssh user@localhost
$ echo $VAR2

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

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

Ρύθμιση και κατάργηση μεταβλητών περιβάλλοντος συστήματος

Ας δημιουργήσουμε μια μεταβλητή διαθέσιμη σε όλους τους χρήστες σε όλες τις περιόδους σύνδεσης τερματικού εκτός από τις απομακρυσμένες, προσθέτοντάς την στο /etc/bash.profile:

vi /etc/bash.profile

εξαγωγή VAR="Αυτή είναι μεταβλητή σε όλο το σύστημα"

Στη συνέχεια ενημερώνουμε:

πηγή /etc/bash.bashrc

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

echo $VAR
$sudo su
$ echo $VAR
$su -
$ echo $VAR

Εάν θέλετε να κάνετε μια μεταβλητή περιβάλλοντος διαθέσιμη σε όλους τους χρήστες που συνδέονται σε αυτό το μηχάνημα εξ αποστάσεως, επεξεργαστείτε το αρχείο /etc/profile:

εξαγωγή VAR1="Αυτή είναι μεταβλητή σε όλο το σύστημα μόνο για απομακρυσμένες περιόδους σύνδεσης"

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

πηγή /etc/profile
$ echo $VAR1

Εάν χρειάζεται να προσθέσετε μια μεταβλητή περιβάλλοντος στο Linux ώστε να είναι προσβάσιμη τόσο από απόσταση όσο και για τοπικές περιόδους λειτουργίας, εξάγετε την στο /etc/environment:

vi /etc/environment

εξαγωγή VAR12="Είμαι διαθέσιμος παντού"

Ελέγχουμε:

πηγή /etc/environment
$ echo $VAR12
$sudo su
$ echo $VAR12
$ έξοδο
$ssh localhost
$ echo $VAR12

2.2. Μεταβλητές Περιβάλλοντος

Το λειτουργικό σύστημα υποστηρίζει έναν ειδικό τύπο πόρων που ονομάζεται Μεταβλητές Περιβάλλοντος (μεταβλητές περιβάλλοντος). Αυτές οι μεταβλητές είναι ένα ζευγάρι ΟΝΟΜΑ - ΑΞΙΑ . Το όνομα μπορεί να ξεκινά με ένα γράμμα και να αποτελείται από γράμματα, αριθμούς και κάτω παύλες.

Για να αντικαταστήσετε την τιμή μιας μεταβλητής στη γραμμή εντολών, προηγηθείτε του ονόματος της μεταβλητής με ένα σύμβολο $:

$ echo $USER επισκέπτης

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

Για να ορίσετε την τιμή μιας μεταβλητής, χρησιμοποιήστε τον τελεστή εκχώρησης (στην περίπτωση κελύφους τύπου Bourne):

$TEST=δοκιμή

ή του ενσωματωμένου τελεστή συνόλου (στην περίπτωση ειδών τύπου C):

$ set TEST=test

Η εντολή set, χωρίς ορίσματα, παραθέτει τις τιμές όλων των μεταβλητών που ορίζονται στο περιβάλλον:

$ set COLUMNS=197 CVS_RSH=ssh DIRSTACK=() EUID=1000 GROUPS=() G_BROKEN_FILENAMES=1 HISTFILE=/home/guest/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 HISTSIZENAME=100000000000HISTFILE=10000HISTSIZE=100homeST/homeST/host IFS =$" \t\n" INPUTRC=/etc/inputrc KDEDIR=/usr KDEDIRS=/home/guest/.local/ KDE_IS_PRELINKED=1 KDE_NO_IPV6=1 LANG=ru_RU.UTF-8 LESSOPEN="|/usr/bin/ lesspipe.sh %s" LINES=65 LOGNAME=επισκέπτης ....

Οι μεταβλητές μπορεί να είναι τοπικές για μια δεδομένη διαδικασία ή καθολικές για μια περίοδο λειτουργίας. Μπορείτε να ορίσετε τοπικές τιμές για μεταβλητές προηγουμένως καλώντας τις εντολές:

$ TEST=test1 sh -c "echo $TEST" test1

Μπορείτε να αξιολογήσετε τα περιεχόμενα ενός συνόλου μεταβλητών για μια περίοδο λειτουργίας καλώντας την ενσωματωμένη εντολή του διερμηνέα env στην περίπτωση διερμηνέων τύπου Bourne (sh, ksh, bash, zsh, pdksh...) και printenv στην περίπτωση διερμηνέων κλώνων C-Shell (csh, tcsh. ..):

$ env HOSTNAME=myhost TERM=xterm SHELL=/bin/bash HISTSIZE=1000 KDE_NO_IPV6=1 SSH_CLIENT=172.16.0.9 50487 22 QTDIR=/usr/lib/qt-3.3 QTINC/in-tY/us. =/dev/pts/6 USER=επισκέπτης MOZILLA_CERTIFICATE_FOLDER=/home/guest/.evolution/ KDEDIR=/usr MAIL=/var/spool/mail/guest PATH=/usr/games:/usr/local/bin:/bin :/usr/bin:/home/guest/bin INPUTRC=/etc/inputrc PWD=/home/guest KDE_IS_PRELINKED=1 LANG=ru_RU.UTF-8 KDEDIRS=/home/guest/.local/ SSH_ASKPASS=/usr/libexec /openssh/gnome-ssh-askpass SHLVL=1 HOME=/home/επισκέπτης LOGNAME=επισκέπτης QTLIB=/usr/lib/qt-3.3/lib CVS_RSH=ssh SSH_CONNECTION=172.16.0.9 50487 129.000.000. /bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env

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

#!/bin/sh μεταβλητή echo TEST: echo $TEST

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

$sh μεταβλητή δοκιμής TEST:

Μπορείτε να κάνετε μια μεταβλητή καθολική χρησιμοποιώντας την πρόταση εξαγωγής (Bourne) ή setenv (C-SHell):

$ εξαγωγή TEST=test1 $ sh δοκιμή TEST μεταβλητή: test1

Μπορείτε να ορίσετε τοπικές τιμές μεταβλητών για την εκτέλεση ενός δεδομένου προγράμματος προηγουμένως καλώντας τις εντολές:

$ TEST=test2 sh test Μεταβλητή TEST: test2

Η κατάργηση των μεταβλητών περιβάλλοντος γίνεται χρησιμοποιώντας τη δήλωση unset.

Η έννοια μιας παραμέτρου στο κέλυφος βίαιο χτύπημαπαρόμοια με την έννοια της μεταβλητής στις συμβατικές γλώσσες προγραμματισμού. Το όνομα της παραμέτρου (ή το αναγνωριστικό) μπορεί να είναι μια λέξη που αποτελείται από αλφαβητικούς χαρακτήρες, αριθμούς και κάτω παύλες (μόνο ο πρώτος χαρακτήρας της λέξης δεν μπορεί να είναι αριθμός), ένας αριθμός ή ένας από τους ακόλουθους ειδικούς χαρακτήρες: * , @ , # , ? , - (ενωτικό), $ , ! , 0 , _ (υπογράμμιση).

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

$ όνομα ηχούς

θα εμφανίσει τη λέξη στην οθόνη όνομα, και την ομάδα

$echo $όνομα

θα επιστρέψει την τιμή της μεταβλητής ονόματος (αν έχει οριστεί, φυσικά).

5.6.1 Ποικιλίες παραμέτρων

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

Ονόματα (αναγνωριστικά) παραμέτρους θέσηςαποτελείται από ένα ή περισσότερα ψηφία (όχι ένα μόνο μηδέν). Οι τιμές των παραμέτρων θέσης είναι τα ορίσματα που δόθηκαν κατά την έναρξη του φλοιού (το πρώτο όρισμα είναι η τιμή της παραμέτρου θέσης 1, κ.λπ.). Μπορείτε να αλλάξετε την τιμή μιας παραμέτρου θέσης χρησιμοποιώντας την ενσωματωμένη εντολή σειρά. Οι τιμές αυτών των παραμέτρων αλλάζουν επίσης ενώ το κέλυφος εκτελεί μία από τις συναρτήσεις (αυτό θα συζητηθεί παρακάτω, στο Ενότητα 5.8).

Ειδικές παράμετροιείναι μοτίβα, η αντικατάσταση (αντικατάσταση) των οποίων πραγματοποιείται ως εξής.

Πίνακας 5.2.Ειδικές παράμετροι.

Παράμετρος

Κανόνες αντικατάστασης

Αντικαταστάθηκε με παραμέτρους θέσης, ξεκινώντας από την πρώτη. Εάν η αντικατάσταση γίνεται μέσα σε διπλά εισαγωγικά, τότε αυτή η παράμετρος αντικαθίσταται με μία λέξη που αποτελείται από όλες τις παραμέτρους θέσης που χωρίζονται από τον πρώτο χαρακτήρα της ειδικής μεταβλητής IFS (συζητείται παρακάτω). Δηλαδή, το ``$*"" είναι ισοδύναμο με το ``$1c$2c...", όπου c είναι ο πρώτος χαρακτήρας στην τιμή της μεταβλητής IFS. Εάν το IFS έχει οριστεί ως κενό ή δεν έχει οριστεί τιμή, οι παράμετροι διαχωρίζονται με κενά

Αντικαταστάθηκε με παραμέτρους θέσης, ξεκινώντας από την πρώτη. Εάν η αντικατάσταση γίνεται μέσα σε διπλά εισαγωγικά, τότε κάθε παράμετρος αντικαθίσταται με ξεχωριστή λέξη. Έτσι, το `` $@"" ισοδυναμεί με ""$1"" ""$2"" ... Εάν δεν υπάρχουν παράμετροι θέσης, τότε δεν εκχωρείται τιμή (η παράμετρος @ απλώς αφαιρείται)

Αντικαταστάθηκε με την δεκαδική τιμή του αριθμού των παραμέτρων θέσης

Αντικαταστάθηκε από την κατάσταση εξόδου του τελευταίου καναλιού προγράμματος στο προσκήνιο που εκτελείται

(ενωτικό)

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

Αντικαταστάθηκε με το αναγνωριστικό διεργασίας (P ID) του κελύφους

Αντικαταστάθηκε με το αναγνωριστικό διεργασίας (P ID) της πιο πρόσφατα εκτελεσθείσας εντολής παρασκηνίου (ασύγχρονη εκτέλεση)

Αντικαταστάθηκε με το όνομα του κελύφους ή του σεναρίου προς εκτέλεση. Αν βίαιο χτύπημαεκτελείται για να εκτελέσει ένα αρχείο δέσμης, το $0 είναι το όνομα του αρχείου. Διαφορετικά, αυτή η τιμή ισούται με την πλήρη διαδρομή προς το κέλυφος

(υπογραμμίζω)

Αντικαταστάθηκε με το τελευταίο όρισμα της προηγούμενης εντολής που εκτελέστηκε (αν πρόκειται για παράμετρο ή μεταβλητή, τότε η τιμή της αντικαθίσταται)

Οι ειδικές παράμετροι που αναφέρονται στον παραπάνω πίνακα διαφέρουν στο ότι μπορούν να αναφέρονται μόνο. Δεν μπορείτε να τους εκχωρήσετε τιμές.

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

$name=value

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

Το σύνολο όλων των μεταβλητών φλοιού συνόλου με τις εκχωρημένες τιμές τους ονομάζεται περιβάλλον ή περιβάλλον φλοιού. Μπορείτε να το δείτε χρησιμοποιώντας την εντολή σειράχωρίς παραμέτρους (απλώς ίσως πρέπει να οργανώσετε έναν αγωγό "σετ | λιγότερο"). Η έξοδος αυτής της εντολής παραθέτει όλες τις μεταβλητές περιβάλλοντος με αλφαβητική σειρά. Για να δείτε την τιμή μιας συγκεκριμένης μεταβλητής, μπορείτε αντί για την εντολή σειρά(στην έξοδο της οποίας μπορείτε ακόμα να αναζητήσετε και να αναζητήσετε την επιθυμητή μεταβλητή) μπορείτε να χρησιμοποιήσετε την εντολή

$echo $όνομα

(Ωστόσο, σε αυτή την περίπτωση πρέπει να γνωρίζετε το όνομα της μεταβλητής που σας ενδιαφέρει).

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

$ ηχώ $τυχαία

θα λαμβάνετε μια νέα τιμή κάθε φορά. Το γεγονός είναι ότι αυτή η μεταβλητή επιστρέφει έναν τυχαίο ακέραιο από το διάστημα 0 - 32.768.

5.6.2 Προτροπές Shell

Μία από τις πολύ σημαντικές μεταβλητές έχει όνομα ΥΓ1. Αυτή η μεταβλητή καθορίζει τον τύπο της πρόσκλησης που βίαιο χτύπημαΠραγματοποιείται έξοδος όταν περιμένει να εισαχθεί η επόμενη εντολή από τον χρήστη. Από προεπιλογή, αυτή η μεταβλητή έχει οριστεί σε "\s-\v\$". Στην πραγματικότητα μέσα βίαιο χτύπημαΥπάρχουν τέσσερις προσκλήσεις που χρησιμοποιούνται σε διαφορετικές καταστάσεις. Μεταβλητός ΥΓ1καθορίζει τον τύπο της προτροπής που εκδίδεται όταν το κέλυφος περιμένει να εισαχθεί μια εντολή. Δευτερεύουσα προτροπή που καθορίζεται από μεταβλητή ΥΓ2, εμφανίζεται όταν το κέλυφος περιμένει να εισαγάγει ο χρήστης κάποια ακόμη δεδομένα που είναι απαραίτητα για τη συνέχιση της εκτελούμενης εντολής ή προγράμματος. Προεπιλεγμένη μεταβλητή ΥΓ2έχει το νόημα" >" . Μπορεί να έχετε ήδη δει αυτό το μήνυμα όταν εκτελέσατε την εντολή Γάταγια να εισάγετε δεδομένα από το πληκτρολόγιο σε ένα αρχείο. Ένα άλλο παράδειγμα είναι η εντολή ftp, μετά την κυκλοφορία του οποίου η πρόσκληση παίρνει και αυτή τη μορφή.

Προτροπή μεταβλητής PS3, που χρησιμοποιείται στην εντολή επιλέγω. Προτροπή μεταβλητής PS4, εκτυπώνεται πριν από κάθε εντολή εκείνη τη στιγμή βίαιο χτύπημαπαρακολουθεί την πρόοδο της εκτέλεσης. Η προεπιλεγμένη τιμή είναι " + ".

Εάν το επιθυμείτε, μπορείτε να αλλάξετε τον τύπο των μεταβλητών ΥΓ1Και ΥΓ2. Σε αυτήν την περίπτωση, μπορείτε να χρησιμοποιήσετε οποιαδήποτε σύμβολα εισαγάγετε από το πληκτρολόγιο, καθώς και έναν ορισμένο αριθμό ειδικών χαρακτήρων, οι οποίοι, κατά τη δημιουργία της συμβολοσειράς προτροπής, αποκωδικοποιούνται σύμφωνα με τον Πίνακα. 5.3 (παραθέτουμε μόνο μερικά από αυτά, για παράδειγμα, για μια πλήρη λίστα, ανατρέξτε στη σελίδα man για το βοηθητικό πρόγραμμα βίαιο χτύπημα) .

Πίνακας 5.3.Ειδικοί χαρακτήρες για τη δημιουργία μιας πρόσκλησης

Σύμβολο

Το νόημά του

Beep (κωδικός ASCII 07)

Ημερομηνία με τη μορφή "Ημέρα, μήνας, ημέρα", για παράδειγμα, Τετάρτη, 17 Οκτωβρίου.

Όνομα κεντρικού υπολογιστή μέχρι την πρώτη τελεία

Πλήρες όνομα κεντρικού υπολογιστή

Τρέχουσα ώρα σε 24ωρη μορφή: ΩΩ:ΛΛ:ΔΣ (ώρες:λεπτά:δευτερόλεπτα)

Τρέχουσα ώρα σε μορφή 12 ωρών: ΩΩ:ΛΛ:ΔΔ

Η τρέχουσα ώρα σε μορφή 12 ωρών π.μ./μ.μ

Όνομα του χρήστη που ξεκίνησε το κέλυφος

Πλήρες όνομα του τρέχοντος καταλόγου εργασίας (ξεκινώντας από τη ρίζα)

Τρέχων κατάλογος εργασίας (δεν έχει καθοριστεί διαδρομή)

Το σύμβολο # εάν το κέλυφος εκτελείται ως υπερχρήστης και το σύμβολο $ , εάν το κέλυφος έχει ξεκινήσει από έναν κανονικό χρήστη.

\nn

Ο χαρακτήρας που έχει τον οκταδικό κωδικό nnn

Νέα γραμμή (ροή γραμμής)

Όνομα κελύφους

Τρέχων αριθμός ομάδας

Μια ανάποδη κάθετο

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

Τέλος ακολουθίας μη εκτυπώσιμων χαρακτήρων

Ο σειριακός αριθμός αυτής της εντολής στο ιστορικό των εντολών

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

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

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

# PS1="[\u@\h \W]\$"

η τυπική προτροπή θα εμφανίσει μια αγκύλη, ένα όνομα χρήστη, ένα σύμβολο @ , όνομα υπολογιστή, κενό διάστημα, όνομα τρέχοντος καταλόγου (χωρίς διαδρομή), αγκύλη κλεισίματος και σύμβολο $ (εάν ένας απλός χρήστης τρέχει στο κέλυφος) ή # (αν το κέλυφος λειτουργεί ως root).

5.6.3 Μεταβλητή ΜΟΝΟΠΑΤΙ

Μια άλλη πολύ σημαντική μεταβλητή έχει όνομα ΜΟΝΟΠΑΤΙ. Καθορίζει μια λίστα διαδρομών προς καταλόγους στους οποίους βίαιο χτύπημααναζητά αρχεία (ιδίως αρχεία με εντολές) σε περιπτώσεις όπου η πλήρης διαδρομή προς το αρχείο δεν καθορίζεται στη γραμμή εντολών. Οι μεμονωμένοι κατάλογοι σε αυτήν τη λίστα χωρίζονται με άνω και κάτω τελείες. Προεπιλεγμένη μεταβλητή ΜΟΝΟΠΑΤΙπεριλαμβάνει καταλόγους /usr/local/bin, /bin, /usr/bin, /usr/X11R6/bin,δηλαδή μοιάζει με:

/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:

Για να προσθέσετε έναν κατάλογο σε αυτήν τη λίστα, πρέπει να εκτελέσετε την ακόλουθη εντολή:

# PATH=$PATH:new_path.

Κατά την εκτέλεση μιας αναζήτησης, το κέλυφος αναζητά τους καταλόγους με τη σειρά που αναφέρονται στη μεταβλητή PATH.

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

5.6.4 Μεταβλητή IFS

Αυτή η μεταβλητή καθορίζει το Internal Field Separator που χρησιμοποιείται στη λειτουργία διαχωρισμού λέξεων των μετατροπών γραμμής εντολών που εκτελούνται από το κέλυφος πριν από την εκτέλεση της γραμμής εντολών για εκτέλεση. Η προεπιλεγμένη τιμή αυτής της μεταβλητής είναι "<Пробел><Символ_ новой_ строки>".

5.6.5 Τρέχοντες και οικείοι κατάλογοι

Το όνομα του τρέχοντος καταλόγου αποθηκεύεται σε μια μεταβλητή περιβάλλοντος (που ονομάζεται PWD) και η τιμή αυτής της μεταβλητής αλλάζει κάθε φορά που ξεκινά το πρόγραμμα CD(και επίσης όταν αλλάζετε τον τρέχοντα κατάλογο με οποιονδήποτε άλλο τρόπο, για παράδειγμα, μέσω του Midnight Commander).

Ομοίως, το πλήρες όνομα (και διαδρομή) του αρχικού καταλόγου του χρήστη που ξεκίνησε τη διαδικασία αποθηκεύεται στη μεταβλητή HOME.

5.6.6 Ομάδα εξαγωγή

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

$name=value

πρέπει να το γράψετε

$export name=value

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

V. Kostromin (kos at rus-linux dot net) - 5,6. Παράμετροι και μεταβλητές. Περιβάλλον Shell