Bash Special Variablen ($ 0, $?, $#, [E -Mail geschützt]</a>, $$, $*)
- 1894
- 7
- Levke Harnapp
Bash ist eine leistungsstarke Hülle, die eine breite Palette spezieller Variablen bietet, mit denen das Verhalten von Skripten manipuliert und gesteuert werden kann. Diese Variablen liefern wesentliche Informationen über die Umgebung, in der das Skript ausgeführt wird, einschließlich der Befehlszeilenargumente, der aktuellen Prozess-ID und dem Status des zuletzt ausgeführten Befehls.
In diesem Artikel werden wir eine eingehende Anleitung für alle Bash-Spezialvariablen anbieten, einschließlich Beispiele für ihre Verwendung und gemeinsame Fallstricke, um sie zu vermeiden.
- ''
$ 0
'' - Der Name des Skripts wird ausgeführt. - ''
$ 1- $ 9
'' - Die ersten neun Befehlszeilenargumente. - ''
$#
'' - Die Anzahl der Befehlszeilenargumente. - ''
$*
'' - Alle Befehlszeilenargumente als einzelne Zeichenfolge. - ''
[E -Mail geschützt]
'' - Alle Befehlszeilenargumente als Array. - ''
$?
'' - Der Exit -Status des zuletzt ausgeführten Befehls. - ''
$$
'' - Die Prozess -ID der aktuellen Hülle. - ''
$!
'' - Die Prozess -ID des letzten Hintergrundbefehls.
Lassen Sie uns die speziellen Variablen ausführlich mit Beispielen diskutieren.
$ 0 - Der Name des Skripts wird ausgeführt
In Bash, $ 0 ist ein spezieller Parameter, der den Namen des Skripts oder der Shell enthält, die derzeit ausgeführt wird. Es ist auch als "Name" oder "Zeroth Argument" des Skripts bekannt.
Angenommen, Sie haben ein Skript auf dem Namen „MyScript.Sch" dass Sie aus einem Verzeichnis ausgehen möchten. In diesem Fall können Sie die Variable $ 0 verwenden, um den Namen des zu verwendenden Skripts zu bestimmen:
#!/bin/bash echo "Das aktuelle Skript ist: $ 0"12 | #!/bin/bashecho "Das aktuelle Skript ist: $ 0" |
Sie können auch das Verzeichnis ermitteln, in dem sich das Skript befindet.
#!/bin/bash script_dir = "$ (cd" $ (DirName "$ Bash_Source [0]") "&& pwd)" echo "Das Skript wird von $ script_dir ausgeführt"123 | #!/bin/bashscript_dir = "$ (CD" $ (DirName "$ Bash_Source [0]") "&& pwd)" echo "Das Skript wird von $ script_dir ausgeführt" |
$ 1, $ 2,…, $ 9 - Befehlszeilenargumente
Der $ 1, $ 2,…, $ 9 Variablen enthalten die ersten neun Befehlszeilenargumente, die an das Skript übergeben wurden. Diese Variablen sind nützlich, um Shell -Skripte zu erstellen, die die Benutzereingabe akzeptieren.
Angenommen, Sie haben ein Skript auf dem Namen "grüßen.Sch" Das nimmt einen Namen als erstes Befehlszeilenargument an. In diesem Fall können Sie die verwenden $ 1 Variable, um den Namen abzurufen und dann im Skriptausgabe zu verwenden.
#!/bin/bash echo "Hallo, $ 1!"12 | #!/bin/bashecho "Hallo, $ 1!" |
Wenn ein Skript auf mehr als neun Befehlszeilenargumente zugreifen muss, ist die $ 10, $ 11,…, $ n Variablen können verwendet werden, um sie abzurufen. Diese Variablen können mit dem Befehl Shift verwendet werden, um Befehlszeilenargumente in Stapeln zu verarbeiten. Stellen Sie sicher, dass die Variable mit geschlossen ist Klammern.
$# - Die Anzahl der Befehlszeilenargumente
Der $# Die Variable enthält die Anzahl der an das Skript übergebenen Befehlszeilenargumente. Diese Variable ist nützlich, um Shell -Skripte zu erstellen, die die Benutzereingabe validieren.
Angenommen, Sie haben ein Skript auf dem Namen "bestätigen.SchDas erfordert zwei Befehlszeilenargumente. In diesem Fall können Sie die $# Variable verwenden, um sicherzustellen, dass die korrekte Anzahl von Argumenten bereitgestellt wird.
#!/bin/bash if [[$# -ne 2]] dann echo "nutzung: validate.SH [Benutzername] [Passwort] "Beenden Sie 1 Fi123456 | #!/bin/bashif [[$# -ne 2]] dann echo "nutzung: validate.SH [Benutzername] [Passwort] "Beenden Sie 1fi |
$* - Alle Befehlszeilenargumente als einzelne Zeichenfolge
Der $* Die Variable enthält alle Befehlszeilenargumente, die als einzelne Zeichenfolge an das Skript übergeben wurden. Diese Variable ist nützlich, um Shell-Skripte zu erstellen, die die gesamte Befehlszeilenzeichenfolge manipulieren müssen.
Angenommen, Sie haben ein Skript auf dem Namen "verbinden.Sch" Dadurch werden zwei Strings als Befehlszeilenargumente angelegt. In diesem Fall können Sie die verwenden $* Variable zur Verkettung der Saiten.
#!/bin/bash angeschlossen = "$*12 | #!/bin/bashjoined = "$* |
[E -Mail geschützt] - Alle Befehlszeilenargumente als Array
Der [E -Mail geschützt] Die Variable enthält alle Befehlszeilenargumente, die als Array an das Skript übergeben wurden. Diese Variable ist nützlich, um Shell-Skripte zu erstellen, die individuelle Befehlszeilenargumente manipulieren müssen.
Angenommen, Sie haben ein Skript auf dem Namen "Liste.Sch" Dadurch werden alle Dateien in einem Verzeichnis aufgeführt, das als Befehlszeilenargument bereitgestellt wird. In diesem Fall können Sie die verwenden [E -Mail geschützt] Variable, um jeden Verzeichnisnamen zu iterieren und die Dateien in diesem Verzeichnis aufzulisten.
#!/Bin/Bash für Verzeichnis in "$@" do echo "Listungsdateien in $ verzeichnis:" ls -l $ Verzeichnis erledigt123456 | #!/bin/bashfor Directory in "[E -Mail geschützt]" do echo "-Listendateien in $ verzeichnis:" ls -l $ DirectoryDone |
$? - Der Exit -Status des zuletzt ausgeführten Befehls
Der $? Die Variable enthält den Exit -Status des zuletzt ausgeführten Befehls. Diese Variable ist hilfreich beim Erstellen von Shell -Skripten, die Fehler behandeln oder unterschiedliche Aktionen abhängig vom Erfolg oder Misserfolg eines Befehls ergreifen müssen.
Angenommen, Sie haben ein Skript auf dem Namen "erstelle Datei.Sch" Dadurch wird eine Datei erstellt und gibt einen Exit -Status zurück, der Erfolg oder Misserfolg angibt. In diesem Fall können Sie die $ verwenden? Variable, um den Exit -Status zu überprüfen und entsprechende Maßnahmen zu ergreifen.
#!/bin/bash touch myfile.txt wenn [$? -EQ 0]] dann echo "Datei erfolgreich erstellt" sonst echo "Fehler erstellen" fi12345678 | #!/bin/bashtouch myfile.txtif [[$? -EQ 0]] dann echo "Datei erfolgreich erstellt" sonst echo "Fehler erstellen" fi |
$$ - Die Prozess -ID der aktuellen Hülle
Der $$ Die Variable enthält die Prozess -ID des aktuellen Skripts. Diese Variable ist nützlich, um Shell -Skripte zu erstellen, die mehrere Prozesse verwalten oder eindeutige Dateinamen erstellen müssen.
Angenommen, Sie haben ein Skript auf dem Namen "Protokoll.Sch" Diese protokolliert Informationen in einer Datei mit einem eindeutigen Namen basierend auf der Prozess -ID. In diesem Fall können Sie die verwenden $$ Variable, um einen eindeutigen Dateinamen zu generieren.
#!/bin/bash log_file = "log _ $$.txt "echo" Anmelde auf Datei $ log_file "123 | #!/bin/bashlog_file = "log _ $$.txt "echo" Anmelde auf Datei $ log_file " |
$! - Die Prozess -ID des letzten Hintergrundbefehls
Der $! Die Variable enthält die Prozess -ID des letzten vom Skript ausgeführten Befehls des letzten Hintergrunds. Diese Variable ist nützlich, um Shell-Skripte zu erstellen, die mehrere Prozesse verwalten oder den Fortschritt von langlebigen Befehlen überwachen müssen.
Angenommen, Sie haben ein Skript auf dem Namen "Hintergrund.Sch" Das führt einen Befehl im Hintergrund aus und protokolliert seinen Fortschritt. In diesem Fall können Sie die verwenden $! Variable, um den Fortschritt des Befehls zu überwachen.
#!/bin/bash mycommand & pid = $! während ps -p $ pid>/dev/null; do echo "Befehl läuft immer noch" Sleep 1 Done Echo "Befehl" ist fertig "12345678 | #!/bin/bashhmycommand & pid = $!während ps -p $ pid>/dev/null; do echo "Befehl läuft immer noch" Sleep 1DoneEcho "Befehl" ist fertig " |
Abschluss
Zusammenfassend liefern Bash Special Variablen wesentliche Informationen über die Umgebung, in der das Skript ausgeführt wird. Mit diesen Variablen können Sie flexiblere, robustere und fehlerresistente Shell-Skripte erstellen. Indem Sie die Verwendung dieser Variablen beherrschen, können Sie Ihre Shell -Skriptfähigkeiten auf die nächste Stufe bringen.
- « Verwenden Sie awk, bc und expr, um mathematische Berechnungen in Bash durchzuführen
- Mathematische Berechnungen bei Bash »