Unix / Linux - Sondervariablen

Hallo da draußen, angehende Programmierer! Ich freue mich sehr, Ihr Guide auf dieser aufregenden Reise in die Welt der Unix- und Linux-Sondervariablen zu sein. Als jemand, der seit vielen Jahren Informatik unterrichtet, kann ich Ihnen versichern, dass das Beherrschen dieser Konzepte ein echtes Spielveränderer in Ihrem Programmierabenteuer sein wird. Also, tauchen wir ein!

Unix / Linux - Special Variables

Einführung in Sondervariablen

Bevor wir uns den Details widmen, lassen Sie uns verstehen, was Sondervariablen sind. In Unix und Linux sind Sondervariablen vordefinierte Variablen, die spezifische Informationen über die Shell-Umgebung und den aktuellen Prozess enthalten. Sie sind wie die geheimen Agenten der Shell-Welt, immer bereit mit wichtigen Informationen!

Kommandozeilenargumente

Was sind Kommandozeilenargumente?

Kommandozeilenargumente sind zusätzliche Informationen, die Sie an ein Skript übergeben, wenn Sie es ausführen. Sie sind wie das Geben von Anweisungen an einen Roboter, bevor er seine Aufgabe startet.

Sehen wir uns ein einfaches Beispiel an:

#!/bin/bash
echo "Hallo, $1!"

Wenn wir dieses Skript als greet.sh speichern und es mit ./greet.sh Alice ausführen, wird esFolgendes ausgeben:

Hallo, Alice!

Hier ist $1 eine Sondervariable, die das erste Kommandozeilenargument darstellt.

Verwendung mehrerer Argumente

Wir sind nicht auf ein einzelnes Argument beschränkt. Lassen Sie uns unser Skript erweitern:

#!/bin/bash
echo "Hallo, $1! Willkommen in $2."

Jetzt, wenn wir ./greet.sh Alice Wonderland ausführen, bekommen wir:

Hallo, Alice! Willkommen in Wonderland.

Hier stellt $1 "Alice" und $2 "Wonderland" dar.

Die Variable $0

Es gibt eine weitere Sondervariable, die erwähnenswert ist: $0. Diese stellt den Namen des Skripts selbst dar. Lassen Sie uns unser Skript ändern:

#!/bin/bash
echo "Dieses Skript heißt $0"
echo "Hallo, $1! Willkommen in $2."

Wenn wir ./greet.sh Alice Wonderland ausführen, gibt es Folgendes aus:

Dieses Skript heißt ./greet.sh
Hallo, Alice! Willkommen in Wonderland.

Sonderparameter $* und $@

Nun sprechen wir über zwei sehr nützliche Sonderparameter: $* und $@. Diese sind wie das dynamische Duo der Kommandozeilenargumente!

Der Parameter $*

Der Parameter $* stellt alle Kommandozeilenargumente als eine einzelne Zeichenkette dar. Es ist so, als ob man alle seine Argumente in einen Korb packt. Hier ist ein Beispiel:

#!/bin/bash
echo "Alle Argumente mit \$*: $*"

Wenn wir dieses Skript mit ./args.sh apple banana cherry ausführen, bekommen wir:

Alle Argumente mit $*: apple banana cherry

Der Parameter $@

Der Parameter $@ ist ähnlich, aber er behandelt jedes Argument als separate Entität. Es ist so, als ob man jedes Argument in seinem eigenen kleinen Kästchen behält. Sehen wir uns das in Aktion an:

#!/bin/bash
echo "Alle Argumente mit \$@:"
for arg in "$@"
do
echo $arg
done

Wenn wir dies mit ./args.sh apple banana cherry ausführen, bekommen wir:

Alle Argumente mit $@:
apple
banana
cherry

Der Unterschied zwischen $* und $@

Vielleicht fragen Sie sich, " sie sehen ja gleich aus!" Die Unterschiede werden offensichtlich, wenn wir sie in doppelten Anführungszeichen verwenden. Lassen Sie uns ein Skript erstellen, um dies zu demonstrieren:

#!/bin/bash
echo "Mit \$*:"
for arg in "$*"
do
echo $arg
done

echo "Mit \$@:"
for arg in "$@"
do
echo $arg
done

Wenn wir dies mit ./difference.sh "Hello World" OpenAI ChatGPT ausführen, bekommen wir:

Mit $*:
Hello World OpenAI ChatGPT

Mit $@:
Hello World
OpenAI
ChatGPT

Sehen Sie den Unterschied? "$*" behandelt alle Argumente als eine einzelne Zeichenkette, während "$@" die einzelnen Argumente beibehält.

Exit-Status

Last but not least sprechen wir über den Exit-Status. In Unix und Linux gibt jede Kommandozeilenanwendung einen Exit-Status zurück, wenn sie beendet wird. Dieser Status ist eine Zahl zwischen 0 und 255, wobei 0 typischerweise Erfolg bedeutet und jede andere Zahl einen Fehler anzeigt.

Die Variable $?

Der Exit-Status der letzten ausgeführten Anweisung wird in der Variable $? gespeichert. Sehen wir uns das in Aktion an:

#!/bin/bash
ls /nicht_-existenter_verzeichnis
echo "Exit-Status des ls-Befehls: $?"

echo "Hallo, Welt!"
echo "Exit-Status des echo-Befehls: $?"

Wenn dieses Skript ausgeführt wird, könnte die Ausgabe Folgendes sein:

ls: kann '/nicht_-existenter_verzeichnis' nicht zugreifen: Datei oder Verzeichnis nicht gefunden
Exit-Status des ls-Befehls: 2
Hallo, Welt!
Exit-Status des echo-Befehls: 0

Der ls-Befehl ist fehlgeschlagen (Exit-Status 2), während der echo-Befehl erfolgreich war (Exit-Status 0).

Verwendung des Exit-Status in Skripten

Wir können den Exit-Status verwenden, um Entscheidungen in unseren Skripten zu treffen. Hier ist ein Beispiel:

#!/bin/bash
ping -c 1 google.com > /dev/null

if [ $? -eq 0 ]
then
echo "Internet funktioniert!"
else
echo "Internet funktioniert nicht!"
fi

Dieses Skript pingt Google einmal und überprüft den Exit-Status. Wenn es 0 (Erfolg) ist, bedeutet das, dass das Internet funktioniert.

Schlussfolgerung

Glückwunsch! Sie haben gerade einen großen Schritt in Ihrer Unix/Linux-Programmierreise gemacht. Diese Sondervariablen mögen klein erscheinen, aber sie sind unglaublich mächtige Werkzeuge in Ihrem Programmierwerkzeugkasten. Denken Sie daran, Übung macht den Meister, also zögern Sie nicht, diese Konzepte in Ihren eigenen Skripten auszuprobieren.

Hier ist eine schnelle Referenztabelle der Sondervariablen, die wir behandelt haben:

Variable Beschreibung
$0 Name des Skripts
$1, $2, ... Kommandozeilenargumente
$* Alle Argumente als eine einzelne Zeichenkette
$@ Alle Argumente als separate Zeichenketten
$? Exit-Status des letzten Befehls

Weiter codieren, weiter lernen und vor allem: Spaß haben! Bis zum nächsten Mal, fröhliches Skripten!

Credits: Image by storyset