Handbuch zu Linux-Variablen. Linux-Umgebungsvariablen, Ubuntu-Shell-Variablen Umgebungsvariablen

Objekte, die benannt sind und Daten enthalten, die von mindestens einer, normalerweise mehreren, Anwendungen verwendet werden, werden als Umgebungsvariablen bezeichnet. Einfach ausgedrückt ist eine Umgebungsvariable nichts anderes als eine Variable, die einen Namen und einen Wert hat.

Die Werte der Umgebungsvariablen können der Standardeditor sein, der verwendet wird, beispielsweise der Speicherort aller Dateien, die auf dem System ausgeführt werden können, oder lokale Einstellungen für das System. Für Anfänger ist es etwas schwierig, aber eine Umgebungsvariable ist eine großartige Möglichkeit, Konfigurationseinstellungen für mehrere Anwendungen und Prozesse freizugeben.

Das Coreutils-Paket enthält die Programme env und printenv. Um alle aktuell relevanten Umgebungsvariablen aufzulisten, geben Sie einfach Folgendes ein:

$ printenv

Es gibt zwei Arten von Umgebungsvariablen in der Bash-Shell:

  • Globale Variablen
  • Lokale Variablen

Globale Umgebungsvariablen

In der Shell-Sitzung werden die globalen Umgebungsvariablen und alle untergeordneten Prozesse angezeigt, die die Shell generiert.

Andererseits kann die Shell auf lokale Variablen nur zugreifen, wenn sie erstellt werden. Dies macht globale Umgebungsvariablen in Anwendungen nützlich, die Informationen vom übergeordneten Prozess benötigen und untergeordnete Prozesse hervorbringen.

Standardmäßig setzt das Linux-System beim Starten einer Bash-Sitzung bestimmte globale Umgebungsvariablen. Systemumgebungsvariablen verwenden jedes Mal Großbuchstaben, um sie von normalen Benutzerumgebungsvariablen zu unterscheiden.

Lokale Umgebungsvariablen

Wie der Name schon sagt, können lokale Umgebungsvariablen nur in dem lokalen Prozess angezeigt werden, in dem sie definiert sind. Lassen Sie sich jedoch nicht von lokalen Umgebungsvariablen verwirren, sie sind genauso wichtig wie globale Umgebungsvariablen. Tatsächlich definiert das Linux-System standardmäßig auch lokale Standardumgebungsvariablen für Sie. Es wird schwierig, wenn Sie versuchen, die Liste der lokalen Umgebungsvariablen anzuzeigen. Leider gibt es für uns keinen Befehl, der nur lokale Umgebungsvariablen anzeigt. Es gibt einen Befehl, der alle Umgebungsvariablen anzeigt, die für einen bestimmten Prozess festgelegt wurden. Beachten Sie, dass dies auch globale Umgebungsvariablen umfasst.

Umgebungsvariablen einstellen

Sie können Ihre eigenen Umgebungsvariablen direkt aus der Bash-Shell erstellen. Im nächsten Abschnitt zeigen wir Ihnen, wie Sie Ihre eigenen Umgebungsvariablen erstellen und von Ihrer interaktiven Shell oder Ihrem Shell-Programm aus darauf verweisen.

Lokale Umgebungsvariablen setzen

Sobald die Bash-Shell startet (oder ein Shell-Skript erscheint), können Sie lokale Variablen erstellen, die in Ihrem Shell-Prozess sichtbar sind. Sie können einer Zeichenfolge oder einer numerischen Variablen eine Umgebungsvariable mit dem Gleichheitszeichen zuweisen, dem der Wert der Variablen zugewiesen wird:

$ andreyex_test = testen $ echo $ andreyex_test testen $

Herzlichen Glückwunsch, Sie haben gerade Ihre erste Variable erstellt. Denken Sie daran, dass Sie jederzeit auf den Wert der Umgebungsvariablen andreyex_test verweisen müssen, indem Sie sie einfach mit dem Namen $ andreyex_test referenzieren.

Wenn Sie eine Wertefolge mit Leerzeichen zuweisen müssen, müssen Sie den Anfang und das Ende der Zeichenfolge mit einem einfachen Anführungszeichen kennzeichnen:

$ andreyex_test = Testen eines langen Strings -bash: a: Befehl nicht gefunden $ andreyex_test = "Testen eines langen Strings" $ echo $ andreyex_test Testen eines langen Strings

Ohne die einfachen Anführungszeichen geht die bash davon aus, dass das nächste Zeichen ein weiterer zu verarbeitender Befehl ist.

Beachten Sie, dass wir Kleinbuchstaben für die von uns definierte lokale Umgebungsvariable verwendet haben, während die Systemumgebungsvariablen, die wir bisher gesehen haben, nur Großbuchstaben verwendet haben.

In der Bash-Shell ist dies die Standardkonvention. Dies ist nicht erforderlich, wenn Sie neue Umgebungsvariablen einrichten, es wird jedoch empfohlen, Kleinbuchstaben zu verwenden. Dies hilft, Ihre persönlichen Umgebungsvariablen von den Ergebnissen der Systemumgebungsvariablen zu unterscheiden.

HINWEIS. Es ist sehr wichtig, dass zwischen dem Namen der Umgebungsvariablen, dem Gleichheitszeichen und dem Wert keine Leerzeichen stehen. Wenn Sie Leerzeichen in die Zuweisung einfügen, interpretiert die Bash-Shell den Wert als separaten Befehl:

$ andreyex_test2 = test -bash: andreyex_test2: Befehl nicht gefunden $

Eine festgelegte lokale Umgebungsvariable in Ihrem Shell-Prozess steht überall in Ihrem Shell-Prozess zur Verfügung. Wenn Sie jedoch eine andere Shell erstellen, ist diese in der untergeordneten Shell nicht verfügbar:

$ bash $ echo $ andreyex_test $ exit exit $ echo $ andreyex_test testet einen langen String $

In diesem Fall haben wir eine untergeordnete Shell gestartet. Wie Sie feststellen können, ist die Umgebungsvariable isreyex_test in der untergeordneten Shell nicht verfügbar (sie enthält einen leeren Wert). Nachdem wir die untergeordnete Shell verlassen und zur ursprünglichen Shell zurückgekehrt sind, war die lokale Umgebungsvariable immer noch verfügbar.

Wenn Sie eine lokale Umgebungsvariable in einem untergeordneten Prozess festlegen, nachdem Sie den untergeordneten Prozess verlassen haben, ist die lokale Umgebungsvariable ebenfalls nicht mehr verfügbar:

$ bash $ andreyex_test = testing $ echo $ andreyex_test testing $ exit exit $ echo $ andreyex_test $

Die in der untergeordneten Shell festgelegte Umgebungsvariable isreyex_test existiert nicht, wenn wir zur übergeordneten Shell zurückkehren.

Festlegen globaler Umgebungsvariablen

Globale Umgebungsvariablen sind aus allen untergeordneten Prozessprozessen sichtbar, die von dem Prozess erstellt wurden, der die globale Umgebungsvariable festlegt. Die Methode zum Erstellen einer globalen Umgebungsvariablen besteht darin, eine lokale Umgebungsvariable zu erstellen und sie dann in die globale Umgebung zu exportieren.

Dies geschieht mit dem Export-Befehl:

$ echo $ andreyex_test testet einen langen String $ export andreyex_test $ bash $ echo $ andreyex_test testet einen langen String $

Nachdem wir den Export-Befehl in der lokalen Umgebungsvariablen andreyex_test verwendet haben, haben wir einen neuen Shell-Prozess gestartet und uns den Wert der Umgebungsvariablen andreyex_test angesehen. Dieses Mal hat der Exportbefehl die globale Umgebungsvariable global gemacht, sodass sie ihren Wert behält.

Beachten Sie, dass Sie beim Ausführen des Exportbefehls in einer lokalen Umgebungsvariablen nicht das Dollarzeichen verwenden, um auf den Variablennamen zu verweisen.

Umgebungsvariablen entfernen

Wenn Sie eine neue Umgebungsvariable erstellen können, ist es natürlich sinnvoll, dass Sie auch die vorhandene Umgebungsvariable löschen können. Dies kann mit dem unset-Befehl erfolgen:

$ echo $ andreyex_test testing $ unset andreyex_test $ echo $ andreyex_test $

Wenn Sie in einem unset-Befehl auf eine Umgebungsvariable verweisen, achten Sie darauf, das Dollarzeichen nicht zu verwenden.

Etwas komplizierter wird es beim Umgang mit globalen Umgebungsvariablen. Wenn Sie sich in einem untergeordneten Prozess befinden und die globale Umgebungsvariable deaktivieren, gilt dies nur für den untergeordneten Prozess. Die globale Umgebungsvariable bleibt im übergeordneten Prozess verfügbar:

$ andreyex_test = testing $ export andreyex_test $ bash $ echo $ andreyex_test testing $ unset andreyex_test $ echo $ andreyex_test $ Exit Exit $ echo $ andreyex_test testing $

In diesem Beispiel setzen wir eine lokale Umgebungsvariable namens greyex_test und exportieren sie dann, um sie zu einer globalen Umgebungsvariablen zu machen. Wir haben dann den Child-Shell-Prozess gestartet und wurden überprüft, ob die globale Umgebungsvariable greyex_test noch verfügbar ist. Dann haben wir, während wir uns noch in der Child-Shell befanden, mit dem Befehl unset die globale Umgebungsvariable andreyex_test entfernt und dann die Child-Shell verlassen. Nun zurück zur ursprünglichen übergeordneten Shell, wir haben den Wert der Umgebungsvariablen andreyex_test überprüft und er ist immer noch gültig.

Shell-Standardumgebungsvariablen

Es gibt bestimmte Umgebungsvariablen, die die Bash-Shell verwendet, um die Systemumgebung zu bestimmen. Sie können diese Variablen jederzeit für die Verwendung auf Ihrem Linux-System zählen. Da bash eine Ableitung der ursprünglichen Unix-Bourne-Shell ist, enthält sie auch die ursprünglich in dieser Shell definierten Umgebungsvariablen.

Die folgenden Beispiele zeigen, dass die von der Bash-Shell bereitgestellten Umgebungsvariablen mit der ursprünglichen Unix-Shell Bourne kompatibel sind.

Die bisher wertvollste Umgebungsvariable auf dieser Liste ist die Umgebungsvariable PATH.

Wenn Sie einen Befehl in eine Shell-Befehlsshell (Befehlszeilenschnittstelle) eingeben, muss die Shell das System durchsuchen, um das Programm zu finden. Die Verzeichnisse, nach denen bei der Suche nach Befehlen gesucht wird, werden durch die Umgebungsvariable PATH bestimmt. Unter Linux sollte Ihre PATH-Umgebungsvariable etwa so aussehen:

$ echo $ PATH / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / snap / bin $

In diesem Fall wird gezeigt, dass es acht Verzeichnisse gibt, in denen die Shell nach Befehlen sucht. Jedes Verzeichnis wird durch einen Doppelpunkt getrennt, und es gibt kein Ende der Verzeichnisliste am Ende der PATH-Variablen. Sie können PATH jederzeit weitere Verzeichnisse hinzufügen, indem Sie ein neues Verzeichnis hinzufügen und einen weiteren Doppelpunkt hinzufügen. PATH demonstriert auch die Anfrage, in der nach Aufträgen gesucht wird.

Zusätzlich zu den standardmäßigen Bourne-Umgebungsvariablen bietet die Bash-Shell auch mehrere Variablen, wie gezeigt:

Bash Shell-Bourne-Variablen:

CDPATH: Eine durch Doppelpunkte getrennte Liste von Verzeichnissen, die als Suchpfad für den Befehl cd verwendet wird.
HOME: Heimatverzeichnis des aktuellen Benutzers.
IFS: eine Liste von Zeichen, die Felder trennen, die vom Wrapper verwendet werden, um Textzeichenfolgen zu trennen.
MAIL: Der Dateiname für die Mailbox des aktuellen Benutzers. Die Bash-Shell überprüft diese Datei auf neue E-Mails.
MAILPATH: Eine Liste mit mehreren Dateinamen für die Mailbox des aktuellen Benutzers. Die Bash-Shell überprüft jede Datei in dieser Liste auf neue E-Mails.
OPTARG: Der Wert des letzten Parameterarguments, das vom Befehl getopts verarbeitet wurde.
OPTIND: Indexwert des letzten Parameterarguments, das vom Befehl getopts verarbeitet wurde.
PATH: Eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen die Shell nach Befehlen sucht.
PS1: die Eingabeaufforderung der Hauptbefehlszeile.
PS2: Eingabeaufforderungszeichenfolge der sekundären Shell-Befehlszeilenschnittstelle.

Shell-Bash-Umgebungsvariablen:

BASH: vollqualifizierter Pfadname zum Ausführen der aktuellen Instanz der Bash-Shell.
BASH_ENV: Während der Installation versucht jedes Bash-Skript, die durch diese Variable definierte Startdatei vor dem Start auszuführen.
BASH_VERSION: Die Versionsnummer der aktuellen Bash-Shell-Instanz.
BASH_VERSINFO: Ein Array von Variablen, das die unterschiedlichen Haupt- und Nebenversionsnummern der aktuellen Bash-Shell-Instanz enthält.
COLUMNS: Enthält die Terminalbreite, die für die aktuelle Bash-Shell-Instanz verwendet wird.
COMP_CWORD: Der Index in der Variablen COMP_WORDS, der die aktuelle Cursorposition enthält.
COMP_LINE: die aktuelle Befehlszeile.
COMP_POINT: Index der aktuellen Cursorposition relativ zum Anfang des aktuellen Befehls.
COMP_WORDS: Ein Variablenarray, das die einzelnen Wörter der aktuellen Befehlszeile enthält.
COMPREPLY: Ein variables Array, das die möglichen Exit-Codes enthält, die von der Shell-Funktion generiert werden.
DIRSTACK: ein Array von Variablen, das den aktuellen Inhalt des Verzeichnisstapels enthält.
EUID: Die effektive Benutzer-ID des aktuellen Benutzers.
FCEDIT: Der vom fc-Befehl verwendete Standardeditor.
FIGNORE: Eine durch Doppelpunkte getrennte Liste von Suffixen, die bei der Dateinamenvervollständigung ignoriert werden sollen.
FUNCNAME: Der Name der aktuell ausgeführten Shell-Funktion.
GLOBIGNORE: Eine durch Doppelpunkte getrennte Liste von Mustern, die eine Reihe von Dateinamen definieren, die beim Erweitern des Dateinamens ignoriert werden sollen.
GRUPPEN: ein variables Array, das eine Liste von Gruppen enthält, deren Mitglied der aktuelle Benutzer ist.
histchars: bis zu drei Zeichen, die die Erweiterung des Verlaufs steuern.
HISTCMD: Verlaufsnummer des aktuellen Befehls.
HISTCONTROL: Steuert, welche Befehle in die Shell-History-Liste eingetragen werden.
HISTFILE: Dateiname zum Speichern der Shell-History-Liste (standardmäßig history.bash).
HISTFILESIZE: Die maximale Anzahl von Zeilen, die in der Verlaufsdatei gespeichert werden sollen.
HISTIGNORE: eine durch Doppelpunkte getrennte Liste von Mustern, die verwendet wird, um zu bestimmen, welche Befehle für die Verlaufsdatei ignoriert werden.
HISTSIZE: die maximale Anzahl von Befehlen, die in der Verlaufsdatei gespeichert sind.
HOSTFILE: Enthält den Namen der Datei, die gelesen werden soll, wenn die Shell den Hostnamen ausfüllen muss.
HOSTNAME: der Name des aktuellen Hosts.
HOSTTYPE: Der String der Bash-Shell-Maschine funktioniert.
IGNOREEOF: Die Anzahl aufeinanderfolgender EOF-Zeichen, die die Shell vor dem Beenden erhalten soll. Wenn dieser Wert nicht vorhanden ist, wird standardmäßig eins verwendet.
INPUTRC: Readline-Init-Dateiname (Standard ist .inputrc).
LANG: Die Gebietsschemakategorie für die Shell.
LC_ALL: Überschreibt die LANG-Variable, die die Gebietsschemakategorie angibt.
LC_COLLATE: Legt die Sortierung fest, die beim Sortieren von Zeichenfolgenwerten verwendet wird.
LC_CTYPE: Bestimmt die Interpretation von Zeichen, die bei der Dateinamenerweiterung und beim Mustervergleich verwendet werden.
LC_MESSAGES: Gibt die Gebietsschemaeinstellung an, die verwendet wird, wenn Zeichenfolgen in doppelten Anführungszeichen mit vorangestelltem Dollarzeichen interpretiert werden.
LC_NUMERIC: Gibt die lokale Einstellung zum Formatieren von Zahlen an.
LINENO: Zeilennummer im ausführbaren Skript.
LINES: Bestimmt die Anzahl der am Terminal verfügbaren Leitungen.
MACHTYPE: String zur Angabe des Systemtyps im Format CPU-Firmen-System.
MAILCHECK: Wie oft die Shell nach neuen E-Mails suchen soll (Standard 60 Sekunden).
OLDPWD: Das vorherige Arbeitsverzeichnis, das von der Shell verwendet wurde.
OPTERR: Wenn auf 1 gesetzt, zeigt die bash Fehler an, die vom Befehl getopts generiert wurden.
OSTYPE: Eine Zeichenfolge, die das Betriebssystem identifiziert, auf dem die Shell ausgeführt wird.
PIPESTATUS: Ein Variablenarray, das eine Liste von Exit-Statuswerten aus Vordergrundprozessprozessen enthält.
POSIXLY_CORRECT: Wenn gesetzt, startet die Bash im POSIX-Modus.
PPID: Prozess-ID (PID) des übergeordneten Bash-Shell-Prozesses.
PROMPT_COMMAND: Wenn gesetzt, der Befehl, der ausgeführt werden soll, bevor die primäre Eingabeaufforderung angezeigt wird.
PS3: Aufforderung zur Verwendung des Auswahlbefehls.
PS4: Eingabeaufforderung wird vor dem Echo der Befehlszeile angezeigt, wenn die Option bash -x verwendet wird.
PWD: aktuelles Arbeitsverzeichnis.
RANDOM: Gibt eine Zufallszahl zwischen 0 und 32767 zurück. Wenn Sie dieser Variablen einen Wert zuweisen, wird ein Zufallszahlengenerator generiert.
ANTWORT: Die Standardvariable für den Lesebefehl.
SEKUNDEN: Die Anzahl der Sekunden seit dem Start der Shell. Das Zuweisen eines Wertes setzt den Timer auf einen Wert zurück.
SHELLOPTS: Eine durch Doppelpunkte getrennte Liste der zulässigen Bash-Shell-Optionen.
SHLVL: Gibt den Shell-Level an, der jedes Mal um eins erhöht wird, wenn eine neue Bash-Shell gestartet wird.
TIMEFORMAT: Ein Format, das bestimmt, wie die Shell Zeitwerte anzeigt.
TMOUT: Ein Wert dafür, wie lange (in Sekunden) Auswahl- und Lesebefehle auf Eingaben warten sollen. Der Standardwert Null bedeutet, dass Sie auf unbestimmte Zeit warten müssen.
UID: Die echte Benutzer-ID des aktuellen Benutzers.

Möglicherweise stellen Sie fest, dass nach Verwendung des Befehls set nicht alle Standardumgebungsvariablen angezeigt werden. Eine Erklärung hierfür könnte sein, dass es sich zwar um Standardumgebungsvariablen handelt, jedoch nicht alle einen Wert enthalten müssen.

Fazit

In diesem Tutorial haben wir die Welt der Linux-Umgebungsvariablen behandelt. Auf globale Umgebungsvariablen wird häufig von jedem Kindprozess zugegriffen, der von dem Prozess erzeugt wird, in dem sie definiert sind. Auf lokale Umgebungsvariablen kann nur von dem Prozess aus zugegriffen werden, in dem sie definiert wurden.

Das Linux-System verwendet jede globale und lokale Umgebungsvariable, um Informationen über die Systemumgebung zu speichern. Sie können auf diese Informationen sowohl über die Shell-Befehlszeilenschnittstelle als auch über interne Shell-Skripte zugreifen. Die Bash-Shell verwendet die in der ursprünglichen UNO-Bourne-Shell definierten Systemumgebungsvariablen sowie viele neue Umgebungsvariablen. Die Umgebungsvariable PATH definiert das Suchmuster, das die Bash-Shell akzeptiert, um einen ausführbaren Befehl zu finden. Sie können die Umgebungsvariable PATH ändern, um Ihre eigenen Verzeichnisse oder vielleicht das aktuelle Verzeichnissymbol hinzuzufügen, um die Arbeit mit Ihren Programmen zu erleichtern. Sie können auch Ihre eigenen globalen und lokalen Umgebungsvariablen für Ihren eigenen Gebrauch erstellen. Nachdem die Umgebungsvariable erstellt wurde, steht sie für die gesamte Shell-Sitzung zur Verfügung.

Es gibt viele Startdateien, die die Bash-Shell starten, nachdem sie gestartet wurde. Diese Startdateien können Umgebungsvariablendefinitionen enthalten, um Standardumgebungsvariablen für jede Bash-Sitzung festzulegen. Nach der Anmeldung bei Linux greift die Bash-Shell auf die Startdatei /etc/profile sowie auf drei lokale Startdateien für jeden Benutzer zu, $ HOME / .bash, $ HOME / .bash login und $ HOME / .profile.

Benutzer passen diese Dateien so an, dass sie Umgebungsvariablen und Startskripts für ihre eigene Verwendung enthalten. Die Bash-Shell bietet zusätzlich Umgebungsvariablen-Arrays. Diese Umgebungsvariablen können mehrere Werte in einer Variablen enthalten. Sie können einzeln auf die Werte zugreifen, indem Sie den Indexwert angeben oder allgemein den vollständig qualifizierten Namen des Umgebungsvariablenarrays angeben. Schließlich müssen wir in diesem Tutorial die Verwendung von Befehlsaliasnamen erwähnen. Obwohl es sich nicht um Umgebungsvariablen handelt, verhalten sich Befehlsaliase fast wie Umgebungsvariablen. Sie ermöglichen Ihnen, einen Alias ​​für einen Befehl zusammen mit seinen Parametern zu definieren. Anstatt einen sehr langen Befehl und Parameter eingeben zu müssen, können Sie ihm einfach einen einfachen Alias ​​geben und den Alias ​​jederzeit in Ihrer Shell-Sitzung verwenden.

Linux-Umgebungsvariablen definieren zusammen mit Shell-Variablen Einstellungen innerhalb einer Benutzersitzung.

Sie werden automatisch geladen, können aber überschrieben werden. Die Umgebung wird jedes Mal erstellt, wenn Sie sich am System anmelden.

Linux-Umgebungsvariablen, Shell-Variablen

Umgebungsvariablen werden für den Benutzer-Shell-Prozess und alle darin erzeugten untergeordneten Prozesse verwendet.

Shell-Variablen enthalten Daten, die den Status der aktuellen Sitzung bestimmen. Zum Beispiel das aktuelle Verzeichnis.

Jede Sitzung verwendet sowohl Umgebungs- als auch Shell-Variablen.

Die Liste der Umgebungsvariablen kann durch Ausführen angezeigt werden printenv oder env

……
LC_MEASUREMENT = ru_RU.UTF-8
LESSCLOSE = / usr / bin / lesspipe% s% s
LC_PAPER = ru_RU.UTF-8
LC_MONETARY = ru_RU.UTF-8
SPRACHE = en_US.UTF-8
……

Der Unterschied ist, dass printenv ermöglicht Ihnen die Anzeige von Daten für eine bestimmte Variable - zum Beispiel:

Der Vorteil von env besteht darin, dass Sie eine Variable an einen bestimmten Befehl übergeben können.

Zum Beispiel:

env SHELL = "/ bin / bash" ls -la / opt

Umgebungsvariablen anzeigen

BASH = / bin / bash
BASHOPTS = checkwinsize: cmdhist: complete_fullquote: expand_aliases: extglob: extquote: force_fignore: histappend: interactive_comments: progcomp: promptvars: sourcepath
BASH_ALIASES = ()
BASH_ARGC = ()
……

Ausgabe kann umgeleitet werden an weniger um die Navigation zu erleichtern

Um die aktuelle Umgebung nicht zu ändern, um unnötige Informationen in der Ausgabe zu entfernen, können Sie dies tun

Im POSIX-Modus werden bash-spezifische Funktionen nicht ausgegeben

Die am häufigsten verwendeten Variablen sind:
  • HÜLSE- ein Wrapper, der Befehle interpretiert
  • NUTZER- Nutzer
  • PWD- Aktuelles Verzeichnis
  • BEGRIFF- die Art des emulierten Terminals

Mit Shell-Befehlen können Sie den Wert von Variablen ändern. So gibt pwd das aktuelle Verzeichnis an die Konsole aus.

/ home / admin

Dies ist eine PWD-Shell-Variable

[E-Mail geschützt]: ~ $ setzen | grep PWD

OLDPWD = /tmp
PWD = / home / admin

Gehen wir zu /tmp und sehen, wie sich der Wert ändert

[E-Mail geschützt]: ~ $ cd / tmp /

[E-Mail geschützt]: / tmp $ set | grep PWD

OLDPWD = / home / admin
PWD = / tmp

Sie können sehen, dass sich der Wert der Shell-Variablen PWD einfach ändert, wenn Sie das Verzeichnis ändern, und er ändert sich auch OLDPWD

So legen Sie eine Umgebungs- oder Wrappervariable fest

Die Shell-Variable wird so hinzugefügt

SOMEVAR = "Hallo"

Sie wird nicht in der env-Ausgabe angezeigt, da es sich um eine Shell-Variable und keine Umgebungsvariable handelt.

Sie können den Inhalt durch Echo anzeigen, indem Sie ein $-Zeichen vor dem Namen hinzufügen

Hi

Um der Umgebung eine Variable hinzuzufügen, muss sie exportiert werden

export SOMEVAR = "Hallo"

SOMEVAR = Hallo zusammen

Danach wird der Wert von den Kindprozessen geerbt.

Sie können eine Umgebungsvariable mit dem gleichen Exportbefehl mit der Taste löschen -n

Der Wert wird aus der Shell entfernt

Automatisches Laden von Variablen beim Login

Linux-Systeme verwenden Dateien ~ / .bashrc, ~ / .bash_profile, ~ / .bash_login oder ~ / .profil Variablen zu definieren. Dateien werden beim Login gelesen, welche verwendet wird, hängt von der Distribution ab.

Unter Ubuntu / Debain ist dies ~ / .bashrc. Es werden sowohl Umgebungsvariablen als auch Shell-Variablen hinzugefügt.

Das allererste ist gelesen / etc / Profil... Es gibt an und kann überschrieben werden, welche Dateien und in welcher Reihenfolge als nächstes verwendet werden sollen.

Für Nicht-Login-Sitzungen werden Variablen in /etc/bash.bashrc gesetzt. Eine solche Sitzung ist typisch für Skripte, die im Hintergrund laufen.

Für die meisten Aufgaben reicht es aus zu bearbeiten ~ / .bashrc.

Umgebungsvariablen in Linux sind spezielle Variablen, die von der Shell definiert und von Programmen zur Laufzeit verwendet werden. Sie können vom System und vom Benutzer definiert werden. Linux-Systemumgebungsvariablen sind systemdefiniert und werden von Programmen auf Systemebene verwendet.

Der Befehl PWD verwendet beispielsweise eine Systemvariable, um das alte Arbeitsverzeichnis beizubehalten. Benutzerumgebungsvariablen werden vom Benutzer für die aktuelle Shell vorübergehend oder dauerhaft festgelegt. Das gesamte Konzept des Hinzufügens und Entfernens von Shell-Variablen dreht sich um mehrere Dateien, Befehle und verschiedene Shells.

Im Allgemeinen kann eine Umgebungsvariable von drei Typen sein:

1. Lokale Umgebungsvariablen

Diese Variablen sind nur für die aktuelle Sitzung definiert. Sie werden nach Beendigung der Sitzung unwiederbringlich gelöscht, sei es der Fernzugriff oder ein Terminalemulator. Sie werden nicht in Dateien gespeichert, sondern mit speziellen Befehlen erstellt und gelöscht.

2. Benutzerdefinierte Shell-Variablen

Diese Shell-Variablen in Linux sind benutzerspezifisch und werden jedes Mal geladen, wenn sie sich mit einem lokalen Terminal anmelden oder eine Remoteverbindung herstellen. Solche Variablen werden normalerweise in Konfigurationsdateien gespeichert: .bashrc, .bash_profile, .bash_login, .profile oder anderen Dateien im Verzeichnis des Benutzers.

3. Systemumgebungsvariablen

Diese Variablen sind im gesamten System für alle Benutzer verfügbar. Sie werden beim Systemstart aus den Systemkonfigurationsdateien geladen: /etc/environment, /etc/profile, /etc/profile.d//etc/bash.bashrc.

Konfigurationsdateien für Linux-Umgebungsvariablen

Hier werfen wir einen kurzen Blick auf die verschiedenen oben aufgeführten Konfigurationsdateien, die verwendet werden, um Umgebungsvariablen für das gesamte System oder für einen bestimmten Benutzer zu setzen.

.bashrc

Dies ist eine benutzerspezifische Variablendatei. Es wird jedes Mal geladen, wenn der Benutzer eine Terminalsitzung erstellt, dh ein neues Terminal öffnet. Alle in dieser Datei erstellten Umgebungsvariablen werden jedes Mal wirksam, wenn eine neue Terminalsitzung gestartet wird.

.bash_profile

Diese Variablen werden jedes Mal wirksam, wenn der Benutzer eine Remote-Verbindung über SSH herstellt. Wenn diese Datei fehlt, sucht das System nach .bash_login oder .profile.

/ usw / Umgebung

Diese Datei dient zum Erstellen, Bearbeiten und Löschen von Umgebungsvariablen auf Systemebene. Die in dieser Datei erstellten Umgebungsvariablen sind für das gesamte System, für jeden Benutzer und sogar bei einer Remote-Verbindung verfügbar.

/etc/bash.bashrc

System-bashrc. Diese Datei wird für jeden Benutzer jedes Mal ausgeführt, wenn er eine neue Terminalsitzung erstellt. Dies funktioniert nur für lokale Benutzer, wenn diese über das Internet verbunden sind, sind solche Variablen nicht sichtbar.

/ etc / Profil

Das Systemdateiprofil. Alle Variablen aus dieser Datei stehen jedem Benutzer des Systems nur dann zur Verfügung, wenn er remote eingeloggt ist. Sie sind jedoch nicht verfügbar, wenn Sie eine lokale Terminalsitzung erstellen, dh wenn Sie nur ein Terminal öffnen.

Alle Linux-Umgebungsvariablen, die mit diesen Dateien erstellt wurden, können entfernt werden, indem sie einfach von dort gelöscht werden. Erst nach jeder Änderung müssen Sie sich entweder abmelden und anmelden oder diesen Befehl ausführen:

Quelldateiname

Hinzufügen von Benutzer- und Systemumgebungsvariablen in Linux

Nachdem Sie nun ein wenig Theorie kennen, gehen wir zur Praxis über. Lokale Umgebungsvariablen in Linux können mit den folgenden Befehlen erstellt werden:

var = Wert
$ Exportvar = Wert

Diese Variablen sind nur für die aktuelle Terminalsitzung verfügbar.

Zum Entfernen von Umgebungsvariablen können mehrere Befehle verwendet werden:

1. Verwenden von env

Standardmäßig kann env verwendet werden, um alle eingestellten Umgebungsvariablen anzuzeigen. Mit der Option -i können Sie jedoch vorübergehend alle Shell-Variablen entfernen und den Befehl ohne Variablen ausführen.

env –i befehle

Var ist eine beliebige Variable, die Sie an diesen Befehl übergeben möchten.

Ein Befehl wie dieser startet die Shell ohne Umgebungsvariablen:

Nach dem Start einer solchen Umgebung sind keine Variablen verfügbar, aber nach dem Beenden kehrt alles an seinen Platz zurück.

2. Verwenden von unset

Dies ist eine weitere Möglichkeit, Linux-Umgebungsvariablen zu entfernen. Unset entfernt die Variable nach Namen bis zum Ende der aktuellen Sitzung:

unset variable_name

3. Setzen Sie den Wert der Variablen auf ""

Dies ist der einfachste Weg, Umgebungsvariablen in Linux zu entfernen. Indem Sie eine Variable auf einen leeren Wert setzen, entfernen Sie sie bis zum Ende der aktuellen Sitzung.

Hinweis: Mit diesen Methoden können Sie die Werte von System- oder Benutzervariablen ändern, diese sind jedoch nur für die aktuelle Sitzung relevant.

Erstellen von Benutzer- und Systemumgebungsvariablen

In diesem Abschnitt sehen wir uns an, wie Sie System- und Benutzervariablen nicht nur für die aktuelle Sitzung festlegen und entfernen, sondern damit der Effekt auch nach einem Neustart bestehen bleibt.

1. Lokale Variablen in Linux installieren und entfernen

Lassen Sie uns eine lokale Variable VAR erstellen und auf einen beliebigen Wert setzen, dann die Einstellung aufheben und sicherstellen, dass sie entfernt wird:

VAR1 = "Verloren"
$ echo $ VAR1
$ unset VAR1
$ echo $ VAR1

Eine andere Möglichkeit, eine Variable zu erstellen, ist der Export-Befehl. Entfernen wir es, indem wir einen leeren Wert zuweisen:

export VAR = "Verloren"
$ echo $ VAR
$VAR =
$ echo $ VAR

Jetzt erstellen wir eine Variable VAR2 und geben ihr einen Wert. Entfernen Sie dann vorübergehend alle lokalen Variablen, indem Sie env -i ausführen. Es wird die Shell ohne Variablen starten. Nach Eingabe von exit werden alle Variablen wiederhergestellt.

VAR2 = "Verloren"
$ echo $ VAR2
$ env -i bash
$ echo $ VAR2

Festlegen und Entfernen von benutzerdefinierten Variablen

Bearbeiten Sie die .bashrc-Datei in Ihrem Home-Verzeichnis, indem Sie den Exportbefehl hinzufügen, um die gewünschte Variable zu exportieren. Führen Sie dann den Quellbefehl aus, um die Änderungen zu übernehmen. Erstellen wir zum Beispiel eine CD-Variable:

Fügen Sie eine Zeile wie diese hinzu (o, dann einfügen, dann Esc und: wq):

export CD = "Das ist Lost Home"

Jetzt muss noch die Konfiguration aktualisiert werden:

Quelle .bashrc
$ echo $ CD

Um diese Variable zu entfernen, entfernen Sie sie einfach aus der .bashrc.

Fügen wir nun eine Umgebungsvariable mit .bash_profile hinzu. Diese Variable ist, wie Sie bereits wissen, nur für die Remote-Anmeldung verfügbar:

vi .bash_profile

Fügen Sie die Zeile hinzu:

export VAR2 = "Das ist Lost Home"

Führen Sie diese Befehle aus, um die Änderungen zu übernehmen und das Hinzufügen der Variablen zu überprüfen:

Quelle .bash_profile
$ echo $ VAR2

Die Variable ist nicht verfügbar, da Sie eine lokale Terminalsitzung erstellt haben, verbinden Sie sich jetzt über ssh:

ssh [E-Mail geschützt]
$ echo $ VAR2

Sie können diese Umgebungsvariable auf die gleiche Weise wie im vorherigen Fall entfernen, indem Sie sie aus der Datei entfernen.

Kommentar: Diese Variablen sind immer verfügbar, jedoch nicht für alle Benutzer.

Einstellen und Entfernen von Systemumgebungsvariablen

Erstellen wir eine Variable, die für alle Benutzer in allen Terminalsitzungen verfügbar ist, mit Ausnahme von Remotesitzungen, indem wir sie zu /etc/bash.profile hinzufügen:

vi /etc/bash.profile

export VAR = "Dies ist eine systemweite Variable"

Dann aktualisieren wir:

Quelle /etc/bash.bashrc

Diese Variable steht nun allen Benutzern in allen Terminals zur Verfügung:

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

Wenn Sie die Umgebungsvariable allen Benutzern zur Verfügung stellen möchten, die eine Remote-Verbindung zu diesem Computer herstellen, bearbeiten Sie die /etc/profile-Datei:

export VAR1 = "Dies ist eine systemweite Variable nur für Remote-Sitzungen"

Aktualisieren Sie die Konfiguration und überprüfen Sie die Verfügbarkeit der Variablen, sie ist nur remote verfügbar:

Quelle / etc / Profil
$ echo $ VAR1

Wenn Sie in Linux eine Umgebungsvariable hinzufügen müssen, damit sie sowohl remote als auch für lokale Sitzungen verfügbar ist, exportieren Sie sie nach /etc/environment:

vi / etc / Umgebung

export VAR12 = "Ich bin überall verfügbar"

Wir überprüfen:

Quelle / etc / Umgebung
$ echo $ VAR12
$ sudo su
$ echo $ VAR12
$ beenden
$ ssh localhost
$ echo $ VAR12

Umgebungsvariablen ( Umgebungsvariable) werden verwendet, um gemeinsame Werte von Variablen in verschiedenen Skripten und Programmen zu speichern. Solche Variablen können temporär gesetzt werden, zum Beispiel für die Betriebsdauer einer bestimmten Terminal-Shell oder für die Dauer einer Benutzersitzung, oder Sie können eine Umgebungsvariable auf globaler Ebene setzen - für das gesamte System.

Umgebungsvariablen

$ HOME
Die Variable enthält den Pfad zum Home-Verzeichnis des aktuellen Benutzers. $ BENUTZER
Aktueller Benutzername $ PATH
Liste der Verzeichnisse, um von der Shell nach ausführbaren Programmen zu suchen. $ PWD
Der Pfad zum aktuellen Arbeitsverzeichnis (oder pwd). Beispiel: dir_path = $ (pwd). $ SHELL
Standardinterpreter $ RANDOM
Erzeugt bei jedem Zugriff auf die Variable eine Zufallszahl 0..32767. $ SEKUNDEN
Zeit in Sek. seit dem Start der Shell. $? Das Ergebnis des vorherigen Befehls. $ HOSTNAME
Computername $ HISTFILE
Pfad zur $IFS-Interpreter-History-Datei
Liste der Befehlstrennzeichen, Parameter, Array-Elemente (Standard: Leerzeichen, Tabulator, neue Zeile) $ PS1
Interpreter-Eingabeaufforderungszeichenfolgenvorlage.

Vorübergehendes Festlegen einer Umgebungsvariablen

Umgebungsvariable für den Sitzungszeitraum festlegen:

# Für neuen Prozess env var_name = Wert [Befehl] # Für die aktuelle Shell und alle ihre Unterprozesse export var_name = Wert [Befehl]

Der Wert der Variablen bleibt erhalten, bis das System neu gestartet wird.

Einen konstanten Wert einstellen

Systemweite Umgebungsvariablen werden über die /etc/Umgebungsdatei gesetzt:

UMGEBUNG = "dev"

Setzen der Umgebungsvariablen für einen bestimmten Benutzer über die Datei ~ / .bashrc oder ~ / .bash_profile:

PATH = "$ (PFAD): / home / user / bin:"

Aufmerksamkeit!

Die Datei ~ / .bash_profile wird ausgeführt, wenn der Interpreter mit dem Schalter -l gestartet wird. Diese Datei kann bei lokaler Anmeldung nicht gelesen werden!

Beachten Sie auch, dass die Änderungen erst nach einem Neustart der Sitzung wirksam werden!

Den Wert einer Umgebungsvariablen anzeigen

Um den Wert einer Umgebungsvariablen anzuzeigen, gibt es den Befehl printenv:

Printenv<имя_переменной>

#shell, #bash, #umwelt

Variablentypen

Wie Sie an den obigen Beispielen sehen können, werden Shell-Variablen normalerweise in Großbuchstaben geschrieben. Bash speichert Variablenlisten von zwei Typen:

Globale Variablen

Globale oder Umgebungsvariablen sind in allen Shells verfügbar. Um Umgebungsvariablen anzuzeigen, können Sie die Befehle verwenden env oder printenv... Diese Befehle werden als Teil des Pakets mitgeliefert sh-utils.

Eine typische Ausgabe ist unten dargestellt:

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 = Standard GNOME_DESKTOP_SESSION_ID = Standard GTK_RC_FILES = /etc / gtkran .2 = dunkelgrün GWMTERM = xterm HISTFILESIZE = 5000 history_control = ignoreups HISTSIZE = 2000 HOME = / nethome / franky HOSTNAME = octarine.hq.garrels.be INPUTRC = /etc / inputrc IRCNAME / java / java / 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.sh% s LEX = LOCAL_MACHINE = octarine LOGNAME = franky = no =_COLORS 00: fi = 00: di = 01; 34: ln = 01; 36: pi = 40; 33: so = 01; 35: bd = 40; 33; 01: cd = 40; 33; 01: oder = 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: *. PLZ = 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: MASCHINEN = Oktarin 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 NNTPPORT = 119 NNTPSERVER = Nachrichten NPX_PLUGIN_PATH4 = weniger / Plugin / Linux nethome / franky / bin.Linux: / nethome / franky / bin: / usr / local / bin: / usr / local / sbin: / usr / X11R6 / bin: / usr / bin: / usr / sbin: / bin: / sbin:. PS1 = \ [\ 033franky ist in \ w \ [\ 033 PS2 = Mehr Input > PWD = / nethome / franky SESSION_MANAGER = local / octarine.hq.garrels.be: /tmp/.ICE-unix/22106 SHELL = /bin / bash SHELL_LOGIN = - Login SHLVL = 2 SSH_AGENT_PID = 22161 SSH_ASKPASS = / usr / libexec / openssh / gnome-ssh-askpass SSH_AUTH_SOCK = / tmp / ssh-XXmhQ4fC / agent.22106 TYPNER = xm = USM frank_ / bin / printenv VISUAL = vi WINDOWID = 20971661 XAPPLRESDIR = / nethome / franky / app-defaults XAUTHORITY = / nethome / franky / .Xauthority XENVIRONMENT = / nethome / franky / .XESHESHARDS XFIL / 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 [E-Mail geschützt]= keine XTERMID = XWINHOME = / usr / X11R6 X = X11R6 YACC = Bison -y

Lokale Variablen

Lokale Variablen sind nur in der aktuellen Befehlsshell verfügbar. Wenn der eingebaute Befehl einstellen ohne Parameter verwendet wird, gibt es eine Liste aller Variablen (einschließlich Laufzeitvariablen) und Funktionen. Lassen Sie uns die Formatierung verwenden und ein sortiertes Ergebnis erzeugen, das die Lokalität der Variablen berücksichtigt.

Unten ist die Diff-Datei, die durch den Vergleich der Ausgabe der Befehle generiert wurde printenv und einstellen, nach dem Entfernen aus der Liste der Funktionen, die auch durch den Befehl angezeigt werden einstellen:

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

Teilen von Variablen durch ihren Inhalt

Neben der Unterteilung von Variablen in lokale und globale können wir sie auch basierend auf dem in der Variablen gespeicherten Inhalt kategorisieren. In dieser Hinsicht werden Variablen in vier Typen eingeteilt:

  • String-Variablen
  • Integer-Variablen
  • Variablen - Konstanten
  • Variablen - Arrays

Wir werden diese Arten von Variablen in Kapitel 10 besprechen. Wir werden jetzt Integer- und String-Werte in unseren Variablen verwenden.

Variablen erstellen

Variablen unterscheiden zwischen Groß- und Kleinbuchstaben und verwenden standardmäßig Großbuchstaben. Es ist manchmal üblich, Kleinbuchstaben zum Schreiben lokaler Variablen zu verwenden. Sie können jedoch beliebige Zeichen für Variablennamen verwenden und sogar Groß- und Kleinbuchstaben mischen. Sie können auch Zahlen in Variablennamen verwenden, aber Namen, die mit Zahlen beginnen, sind nicht erlaubt:

Eingabeaufforderung> export 1number = 1 bash: export: `1number = 1": kein gültiger Bezeichner

Um eine Variable in einer Befehlsshell festzulegen, verwenden Sie den folgenden Befehl

VARNAME = "Wert"

Fügen Sie keine Leerzeichen um das Gleichheitszeichen ein - dies führt zu Fehlern. Wenn Sie Variablen Werte zuweisen, ist es eine gute Angewohnheit, den Inhalt der Zeichenfolge in Anführungszeichen zu setzen; Dies verringert die Wahrscheinlichkeit, dass Sie einen Fehler machen.

Einige Beispiele für die Verwendung von Groß- und Kleinschreibung, Zahlen und Leerzeichen (die Meldung "Befehl nicht gefunden" zeigt an, dass ein Problem vorliegt - ca.):

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: Befehl nicht gefunden franky ~> MYVAR1 = "2" bash: MYVAR1: Befehl nicht gefunden franky ~> MYVAR1 = "2" bash: 2: Befehl nicht gefunden franky ~> unset MYVAR1 Vorname full_name franky ~> echo $ MYVAR1 $ first_name $ full_name<--no output-->frankie ~>

Exportieren von Variablen

Eine wie im obigen Beispiel erstellte Variable ist nur in der aktuellen Shell verfügbar. Dies ist eine lokale Variable: Die untergeordneten Prozesse der aktuellen Shell kennen diese Variable nicht. Um Variablen an eine Subshell zu übergeben, brauchen wir Export es mit dem eingebauten Befehl Export... Die exportierten Variablen werden Umgebungsvariablen genannt. Wertzuweisung und Export erfolgen in der Regel in einem Schritt:

VARNAME = "Wert" exportieren

Die Subshell kann Variablen ändern, die vom Elternprozess geerbt wurden, aber vom Kindprozess vorgenommene Änderungen wirken sich nicht auf den Elternprozess aus. Dies wird im folgenden Beispiel demonstriert:

Franky ~> full_name = "Franky M. Singh" franky ~> bash franky ~> echo $ full_name franky ~> franky beenden ~> full_name franky exportieren ~> bash franky ~> echo $ full_name Franky M. Singh franky ~> export full_name = "Karl der Große" franky ~> echo $ full_name Charles the Great franky ~> exit franky ~> echo $ full_name Franky M. Singh franky ~>

Wenn eine Subshell zum ersten Mal versucht, den Wert full_name zu lesen, wird der Wert nicht gesetzt (Befehl Echo zeigt eine leere Zeile). Nach dem Verlassen der Subshell wird die Variable full_name in die Parent-Shell exportiert - die Variable kann exportiert werden, nachdem ihr ein Wert zugewiesen wurde. Dann wird eine neue Subshell gestartet, in der die aus der Parent-Shell exportierte Variable sichtbar ist. Die Variable wird geändert und ein anderer Wert wird darin gespeichert, aber in der übergeordneten Shell bleibt der Wert dieser Variablen gleich.

Reservierte Variablen

Bourne Shell Reservierte Variablen

Bash verwendet bestimmte Shell-Variablen, genau wie die Bourne-Shell. In einigen Fällen weist die Bash einer Variablen einen Standardwert zu. Die folgende Tabelle fasst diese einfachen Shell-Variablen zusammen:

Tabelle 3.1. Bourne Shell Reservierte Variablen

Variablennamen Definition

Eine durch Doppelpunkte getrennte Liste von Verzeichnissen, die bei der Pfadsuche durch den integrierten Befehl verwendet werden CD.

Heimatverzeichnis des aktuellen Benutzers; standardmäßig im eingebauten Befehl verwendet CD... Der Wert dieser Variablen wird auch anstelle des Tildezeichens verwendet.

Eine Liste von Zeichen, die zum Trennen von Feldern verwendet werden; Wird verwendet, wenn die Shell das Ergebnis in einzelne Wörter aufteilt, nachdem alle Ersetzungen durchgeführt wurden.

Wenn in diesem Parameter ein Dateiname angegeben wird und der Wert der Variablen MAILPATH nicht gesetzt ist, informiert Bash den Benutzer, dass eine Mail in der angegebenen Datei eingegangen ist.

Eine durch Doppelpunkte getrennte Liste von Dateinamen, die die Shell regelmäßig auf neue E-Mails überprüft.

Der Wert des letzten Arguments im Parameter, der vom integrierten Befehl verarbeitet wird getopts.

Der Index des letzten Parameterarguments, das vom integrierten Befehl verarbeitet wurde getopts.

Eine durch Doppelpunkte getrennte Liste von Verzeichnissen, in denen die Shell nach Befehlen sucht.

Primäre Eingabeaufforderungszeichenfolge. Die Vorgabe ist ""\s-\v\$"".

Sekundäre Eingabeaufforderungszeichenfolge. Die Vorgabe ist ""> "".

Bash reservierte Variablen

Die Werte dieser Variablen werden in der Bash festgelegt oder verwendet, werden jedoch in anderen Shells normalerweise nicht als etwas Besonderes behandelt.

Tabelle 3.2. Bash reservierte Variablen

Variablennamen Definition

Diese Variable steuert, wie die Shell mit dem Benutzer interagiert und Aufgaben ausführt.

Der vollständige Pfad wird verwendet, um die aktuelle Bash-Instanz zu starten.

Wenn diese Variable gesetzt ist, wenn die Bash zum Ausführen des Skripts aufgerufen wird, wird ihr Wert als Name der Startdatei verwendet, die vor der Ausführung des Skripts gelesen werden soll.

Die Versionsnummer der aktuellen Bash-Instanz.

Variable – Ein schreibgeschütztes Array, dessen Array-Elemente Informationen bezüglich der Version einer bestimmten Bash-Instanz speichern.

Beim Drucken ausgewählter Listen wird es vom integrierten Befehl verwendet wählen um die Breite des Terminals zu bestimmen. Wird automatisch eingestellt, wenn ein Signal empfangen wird SIGWINCH.

Zeiger auf $ (COMP_WORDS) für das Wort, das die aktuelle Cursorposition speichert.

Die aktuelle Befehlszeile.

Ein Zeiger auf die aktuelle Position des Cursors relativ zum Anfang des aktuellen Befehls.

Variable ist ein Array einzelner Wörter, die in der aktuellen Befehlszeile verwendet werden.

Variable ist ein Array, aus dem die Bash mögliche Zeilenabbrüche liest, die von einer Shell-Funktion generiert werden, die von einem Dienst aufgerufen wird, der zum Programmieren von Abbrüchen entwickelt wurde

Variable ist ein Array, das den aktuellen Zustand des Verzeichnisstapels speichert.

Numerisch Effektive Benutzer-ID Die ID des aktuellen Benutzers.

Der Standardeditor in einem Inline-Befehl fc spezifiziert den Parameter -e

Eine durch Doppelpunkte getrennte Liste von Suffixen, die bei der automatischen Dateinamenvervollständigung ignoriert werden sollten.

Der Name der derzeit ausgeführten Shell-Funktion.

Eine durch Doppelpunkte getrennte Liste von Mustern, die den Satz von Dateinamen angeben, die beim Ersetzen von Dateinamen ignoriert werden sollen.

Variable ist ein Array, das eine Liste von Gruppen enthält, zu denen der aktuelle Benutzer gehört.

Bis zu drei Zeichen, um die Ersetzung des Befehlsverlaufs, die schnelle Ersetzung und die Tokenisierung der vorgenommenen Ersetzungen zu steuern.

Die Nummer des aktuellen Befehls im Befehlsverlauf oder sein Zeiger in der Befehlsverlaufsliste.

Bestimmt, ob der Befehl der Befehlsverlaufsdatei hinzugefügt wird.

Der Name der Datei, in der der Befehlsverlauf gespeichert wird. Standardwert: ~ / .bash_history.

Die standardmäßige maximale Anzahl von Zeilen in einer Befehlsverlaufsdatei beträgt 500.

Eine durch Doppelpunkte getrennte Liste von Mustern, die verwendet wird, um zu bestimmen, ob ein Befehl in Befehlsverlaufslisten gespeichert werden soll.

Die maximale Anzahl von Befehlen, die in der Befehlsverlaufsliste gespeichert werden können, beträgt standardmäßig 500.

Enthält einen Dateinamen im gleichen Format wie die Datei /etc/hosts, der gelesen werden kann, wenn die Shell einen Hostnamen vervollständigen muss.

Der Name des aktuellen Hosts.

Eine Zeichenfolge, die die Maschine beschreibt, auf der Bash ausgeführt wird.

Steuert, was die Shell tut, wenn sie ein Zeichen als Abschlusszeichen im Eingabestream empfängt. EOF(Dateiende-Zeichen).

Der Name der Readline-Initialisierungsdatei, die die Standarddatei /etc/inputrc ersetzt.

Wird verwendet, um das Gebietsschema für alle Kategorien zu definieren, die nicht explizit mithilfe von Variablen festgelegt wurden, deren Namen mit LC_-Zeichen beginnen.

Diese Variable überschreibt den Wert der Variablen LANG und alle anderen Variablen, die mit LC_ beginnen und die Lokalisierungskategorie angeben.

Diese Variable gibt die Sortierreihenfolge an, die beim Sortieren von Platzhalterdateinamen verwendet wird, und bestimmt die Interpretation von Bereichen, Übereinstimmungsklassen und Zeichenvergleichsregeln für die Dateinamenerweiterung und den Mustervergleich.

Diese Variable bestimmt die Interpretation von Zeichen und die Zeichenklasse für die Dateinamenerweiterung und den Mustervergleich.

Diese Variable gibt die Lokalisierungskategorie an, die verwendet wird, um Strings in doppelten Anführungszeichen zu behandeln, denen das $-Zeichen vorangestellt ist.

Diese Variable definiert die Lokalisierungskategorie für das Zahlenformat.

Die Zeilennummer im Skript oder der Shell-Funktion, die gerade ausgeführt wird.

Wird vom eingebauten Befehl verwendet wählen um die Länge der Spalte festzulegen, in der die ausgewählten Listen angezeigt werden.

Ein String, der den Systemtyp, auf dem Bash läuft, vollständig beschreibt, wobei das GNU CPU-COMPANY-SYSTEM-Standardformat verwendet wird.

Legt (in Sekunden) fest, wie oft die Shell nach E-Mails in Dateien suchen soll, die in den Variablen MAILPATH oder MAIL angegeben sind.

Vorheriges Arbeitsverzeichnis, das mit dem eingebauten Befehl festgelegt wurde CD.

Wenn auf 1 gesetzt, zeigt Bash Fehlermeldungen an, die vom eingebauten Befehl generiert wurden getopts.

Eine Zeichenfolge, die das Betriebssystem beschreibt, auf dem Bash ausgeführt wird.

Variable ist ein Array, das die Liste der Werte der Exit-Zustände von Prozessen in der letzten Pipeline enthält (die aus einem Befehl bestehen kann).

Wird diese Variable beim Start der bash der Umgebung hinzugefügt, geht die Shell in den POSIX-Modus über.

Ist diese Variable gesetzt, wird der Wert als Befehl interpretiert, der vor jeder Ausgabe der primären Prompt-Zeile (PS1) ausgeführt wird.

Der Wert dieser Variablen wird für den Befehl verwendet wählen als Aufforderungszeichenfolge. Default - ""#? ""

Der Eingabeaufforderungszeichenfolgenwert, der vor der Befehlszeile ausgegeben wird, wenn die Option -x so eingestellt ist, dass sie die Befehlszeile wiederholt; der Standardwert ist "+".

Das aktuelle Arbeitsverzeichnis, wie es durch den integrierten Befehl festgelegt wurde CD.

Bei jedem Zugriff auf diesen Parameter wird eine zufällige ganze Zahl im Bereich von 0 bis 32767 generiert. Der Wert dieser Variablen wird in Zufallszahlengeneratoren verwendet.

Standardmäßig verwendete Variable im integrierten Befehl lesen.

Diese Variable gibt die Anzahl der Sekunden an, die seit dem Start der Shell vergangen sind.

Liste der in der Befehlsshell eingestellten Parameter; durch Doppelpunkte getrennt.

Erhöht jedes Mal um eins, wenn eine neue Instanz von Bash gestartet wird.

Der Wert dieses Parameters wird als String verwendet, der das Format angibt, in dem Informationen über die Ausführungszeit für Pipelines ausgegeben werden, denen ein reserviertes Wort vorangestellt ist Zeit.

Wenn TMOUT auf einen Wert größer als Null gesetzt ist, wird dies als Standard-Timeout im eingebauten Befehl behandelt lesen... Wenn die Shell interaktiv gestartet wird, wird dieser Wert als die Anzahl der Sekunden interpretiert, die die Shell nach der Ausgabe der primären Eingabeaufforderung auf Eingaben wartet. Wenn keine Eingabe erfolgt, wird Bash nach dieser Zeit beendet.

Numerischer Wert, echte Benutzer-ID des aktuellen Benutzers.

Weitere Informationen finden Sie in den Bash-Manpages oder in der Dokumentation. Einige Variablen sind schreibgeschützt, einige werden automatisch gesetzt und einige verlieren ihre Bedeutung, wenn sie auf einen anderen Wert als den Standardwert gesetzt werden.

Spezielle Parameter

Die Shell behandelt einige Parameter auf besondere Weise. Diese Parameter können nur verwendet werden, um Werte von ihnen zu erhalten; Sie können ihnen keine Werte zuweisen.

Tabelle 3.3. Bash-Spezialvariablen

Symbol Definition

Gibt Positionsparameter zurück, beginnend mit dem ersten. Wenn ein Parameter in doppelten Anführungszeichen angegeben wird, wird er durch ein einzelnes Wort ersetzt, das die Werte jedes Parameters enthält, getrennt durch das erste Zeichen der Sondervariablen IFS.

Gibt Positionsparameter zurück, beginnend mit dem ersten. Wenn ein Parameter in doppelten Anführungszeichen angegeben wird, wird jeder Parameter in einem separaten Wort zurückgegeben.

Gibt die Anzahl der Positionsparameter zurück, angegeben als Dezimalwert.

Gibt den Rückkehrcode der letzten im Vordergrundmodus ausgeführten Pipeline zurück.

Der Bindestrich-Parameter gibt die Flags des aktuellen Parameters zurück, wie sie beim Aufruf des Built-Ins gesetzt wurden einstellen, oder wie sie von der Shell selbst installiert wurden (zum Beispiel -i).

Gibt die Prozess-ID der Shell zurück.

Ruft die Prozess-ID des letzten Befehls ab, der im Hintergrundmodus (asynchron) ausgeführt wurde.

Gibt den Namen der Shell oder des Skripts zurück.

Der Parameter underscore wird beim Start der Shell gesetzt und enthält den vollqualifizierten Namen der Shell oder des Skripts, das bzw. das ausgeführt wird, wie es in der Argumentliste übergeben wurde. Der Wert wird dann durch das letzte Argument des vorherigen Befehls ersetzt. Dieser Parameter gibt auch den vollständigen Pfad zu jedem ausgeführten und in der Umgebung platzierten Befehl an, der in diesen Befehl exportiert wurde. Beim Prüfen von Mail enthält dieser Parameter den Namen der Maildatei.

Positionsparameter sind Wörter, die dem Namen eines Shell-Skripts folgen. Sie werden in den Variablen $ 1, $ 2, $ 3 usw. gespeichert. Variablen werden dem internen Array nach Bedarf hinzugefügt. Die Variable $ # gibt die Gesamtzahl der Parameter an, wie im folgenden einfachen Skript gezeigt:

# positional.sh # Dieses Skript liest 3 Positionsparameter und gibt sie aus. POSPAR1 = "$ 1" POSPAR2 = "$ 2" POSPAR3 = "$ 3" echo "$ 1 ist der erste Positionsparameter, \ $ 1." echo "$ 2 ist der zweite Positionsparameter, \ $ 2." echo "$ 3 ist der dritte Positionsparameter, \ $ 3." echo echo "Die Gesamtzahl der Positionsparameter beträgt $ #."

Beim Starten des Skripts können Sie beliebig viele Argumente angeben:

Franky ~> positional.sh eins zwei drei vier fünf eins ist der erste Positionsparameter, $ 1. two ist der zweite Positionsparameter, $ 2. Three ist der dritte Positionsparameter, $ 3. Die Gesamtzahl der Positionsparameter ist 5.franky ~> positional.sh eins zwei eins ist der erste Positionsparameter, $ 1. two ist der zweite Positionsparameter, $ 2. ist der dritte Positionsparameter, $ 3. Die Gesamtzahl der Positionsparameter beträgt 2.

Weitere Informationen zur Verwendung dieser Parameter finden Sie in Kapitel 7, "Bedingte Anweisungen" und im Abschnitt "Die eingebaute Verschiebung".

Einige Beispiele für andere spezielle Parameter:

Franky ~> grep wörterbuch / usr / share / dict / wörterbuch franky ~> echo $ _ / usr / share / dict / words franky ~> echo $$ 10662 franky ~> mozilla & 11064 franky ~> echo $! 11064 franky ~> echo $ 0 bash franky ~> echo $? 0 franky ~> ls doesnotexist ls: doesnotexist: Keine solche Datei oder kein Verzeichnis franky ~> echo $? 1 Frank ~>

Nutzer franky beginnt mit der Eingabe des Befehls grep, wodurch der Wert der Variablen _ zugewiesen wird. Die Prozess-ID dieser Shell ist 10662. Wenn die Ausführung einer Aufgabe in den Hintergrund gedrängt wird, in der Variablen! enthält die Prozess-ID des Hintergrundjobs. Eine laufende Befehlsshell ist bash... Wenn ein Fehler aufgetreten ist, in der Variablen? es wird einen anderen Rückkehrcode als 0 (Null) geben.

Erweiterung des Umfangs von Skripten mit Variablen

Neben der besseren Lesbarkeit des Skripts mit Variablen können Variablen Ihnen auch dabei helfen, das Skript schnell unter verschiedenen Bedingungen oder für andere Zwecke anzuwenden. Betrachten Sie das folgende Beispiel – ein sehr einfaches Skript, das ein Backup des Home-Verzeichnisses des Benutzers auf einem Remote-Server erstellt franky:

#! /bin / bash # Dieses Skript erstellt ein Backup meines Home-Verzeichnisses. cd /home # Dies erzeugt das Archiv tar cf /var/tmp/home_franky.tar franky> /dev / null 2> & 1 # Entfernen Sie zuerst die alte bzip2-Datei. Umleitungsfehler, da dadurch einige generiert werden, wenn das Archiv # nicht existiert. Erstellen Sie dann eine neue komprimierte Datei. rm /var/tmp/home_franky.tar.bz2 2> / dev / null bzip2 /var/tmp/home_franky.tar # Kopieren Sie die Datei auf einen anderen Host - wir haben SSH-Schlüssel, damit dies ohne Eingriff funktioniert. scp /var/tmp/home_franky.tar.bz2 bordeaux: /opt/backup/franky> /dev/null 2> & 1 # Erzeuge einen Zeitstempel in einer Logdatei. Datum >> /home/franky/log/home_backup.log Echosicherung erfolgreich >> /home/franky/log/home_backup.log

Zunächst einmal ist es wahrscheinlicher, dass Sie Fehler machen, wenn Sie Dateien und Verzeichnisse bei Bedarf manuell angeben. Angenommen, der Benutzer franky möchte dieses Skript an den Benutzer weitergeben carol dann vorher carol in der Lage sein wird, ein Skript zu verwenden, um sein Home-Verzeichnis zu sichern, wird er ziemlich viel bearbeiten müssen. Das gleiche passiert, wenn der Benutzer franky möchte dieses Skript verwenden, um andere Verzeichnisse zu sichern. Um den Geltungsbereich zu erweitern, verwenden Sie Variablen für alle Dateien, Verzeichnisse, Benutzernamen, Servernamen usw. Dann müssen Sie den Wert nur einmal ändern und nicht das gesamte Skript durchlaufen, um alle Stellen zu finden, an denen ein bestimmter Parameter vorkommt. Beispiel:

#! /bin / bash # Dieses Skript erstellt ein Backup meines Home-Verzeichnisses. # Ändern Sie die Werte der Variablen, damit das Skript für Sie funktioniert: 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 # Dies erzeugt das Archiv tar cf $ TARFILE $ BACKUPFILES> /dev/null 2> & 1 # Entfernen Sie zuerst die alte bzip2-Datei. Umleitungsfehler, da dadurch einige generiert werden, wenn das Archiv # nicht existiert. Erstellen Sie dann eine neue komprimierte Datei. rm $ BZIPFILE 2> / dev / null bzip2 $ TARFILE # Kopieren Sie die Datei auf einen anderen Host - wir haben SSH-Schlüssel, damit dies ohne Eingriff funktioniert. scp $ BZIPFILE $ SERVER: $ REMOTEDIR> / dev / null 2> & 1 # Erzeuge einen Zeitstempel in einer Logdatei. Datum >> $ LOGFILE Echosicherung erfolgreich >> $ LOGFILE

Fortsetzung des Themas:
Apfel

TTK ist ein renommiertes Unternehmen, das seine Tätigkeit bereits 1997 aufgenommen hat und Dienstleistungen im Bereich Telekommunikation anbietet. Der Hauptsitz der Organisation befindet sich in Moskau und ...