Arbeiten mit Variablen unter Linux

Viele wichtige Werte sind auf Linux-Systemen in sogenannten "Variablen" gespeichert, aber es gibt tatsächlich verschiedene Arten von Variablen und einige interessante Befehle, die Ihnen bei der Arbeit mit ihnen helfen können. In einem früheren Beitrag haben wir uns Umgebungsvariablen und deren Definition angesehen. In diesem Beitrag werden wir uns mit Variablen befassen, die in der Befehlszeile und in Skripten verwendet werden.

Benutzervariablen

Während es ziemlich einfach ist, eine Variable in der Befehlszeile einzurichten, gibt es einige interessante Tricks. Um eine Variable einzurichten, müssen Sie lediglich Folgendes tun:

$ myvar = 11 $ myvar2 = "elf" 

Um die Werte anzuzeigen, gehen Sie einfach wie folgt vor:

$ echo $ myvar 11 $ echo $ myvar2 elf 

Sie können auch mit Ihren Variablen arbeiten. Um beispielsweise eine numerische Variable zu erhöhen, können Sie einen der folgenden Befehle verwenden:

$ myvar = $ ((myvar + 1)) $ echo $ myvar 12 $ ((myvar = myvar + 1)) $ echo $ myvar 13 $ ((myvar + = 1)) $ echo $ myvar 14 $ ((myvar ++)) $ echo $ myvar 15 $ let "myvar = myvar + 1" $ echo $ myvar 16 $ let "myvar + = 1" $ echo $ myvar 17 $ let "myvar ++" $ echo $ myvar 18 

Mit einigen davon können Sie dem Wert einer Variablen mehr als 1 hinzufügen. Zum Beispiel:

$ myvar0 = 0 $ ((myvar0 ++)) $ echo $ myvar0 1 $ ((myvar0 + = 10)) $ echo $ myvar0 11 

Bei all diesen Auswahlmöglichkeiten finden Sie wahrscheinlich mindestens eine, die leicht zu merken und bequem zu verwenden ist.

Du kannst auch nicht gesetzt eine Variable - im Grunde undefiniert.

$ unset myvar $ echo $ myvar 

Eine weitere interessante Option ist, dass Sie eine Variable einrichten und erstellen können schreibgeschützt. Mit anderen Worten, wenn der Wert einmal auf schreibgeschützt eingestellt ist, kann er nicht mehr geändert werden (zumindest nicht ohne einige sehr knifflige Befehlszeilen-Assistenten). Das heißt, Sie können es auch nicht deaktivieren.

$ readonly myvar3 = 1 $ echo $ myvar3 1 $ ((myvar3 ++)) -bash: myvar3: schreibgeschützte Variable $ unset myvar3 -bash: unset: myvar3: kann nicht deaktiviert werden: readonly variable 

Sie können jede dieser Einstell- und Inkrementierungsoptionen zum Zuweisen und Bearbeiten von Variablen in Skripten verwenden, es gibt jedoch auch einige sehr nützliche interne Variablen zum Arbeiten in Skripten. Beachten Sie, dass Sie ihre Werte nicht neu zuweisen oder erhöhen können.

Interne Variablen

Es gibt einige Variablen, die in Skripten verwendet werden können, um Argumente auszuwerten und Informationen über das Skript selbst anzuzeigen.

  • $ 1, $ 2, $ 3 usw. repräsentieren die ersten, zweiten, dritten usw. Argumente des Skripts.
  • $ # steht für die Anzahl der Argumente.
  • $ * steht für die Zeichenfolge.
  • $ 0 steht für den Namen des Skripts.
  • $? stellt den Rückkehrcode des zuvor ausgeführten Befehls dar (0 = Erfolg).
  • $$ zeigt die Prozess-ID für das Skript an.
  • $ PPID zeigt die Prozess-ID für Ihre Shell an (der übergeordnete Prozess für das Skript)..

Einige dieser Variablen funktionieren auch in der Befehlszeile, zeigen jedoch verwandte Informationen an:

  • $ 0 zeigt den Namen der verwendeten Shell an (z. B. -bash)..
  • $$ zeigt die Prozess-ID für Ihre Shell an.
  • $ PPID zeigt die Prozess-ID für den übergeordneten Prozess Ihrer Shell an (für mich ist dies sshd)..

Wenn wir alle diese Variablen in ein Skript werfen, um die Ergebnisse zu sehen, können wir Folgendes tun:

#! / bin / bash echo $ 0 echo $ 1 echo $ 2 echo $ # echo $ * echo $? echo $$ echo $ PPID 

Wenn wir dieses Skript aufrufen, sehen wir ungefähr Folgendes:

$ tryme eins zwei drei / home / shs / ​​bin / tryme <== script name one <== first argument two <== second argument 3 <== number of arguments one two three <== all arguments 0 <== return code from previous echo command 10410 <== script's process ID 10109 <== parent process's ID 

Wenn wir die Prozess-ID der Shell überprüfen, sobald das Skript ausgeführt wurde, können wir feststellen, dass sie mit der im Skript angezeigten PPID übereinstimmt:

$ echo $$ 10109 <== shell's process ID 

Natürlich verwenden wir diese Variablen mit größerer Wahrscheinlichkeit auf wesentlich nützlichere Weise als nur mit der Anzeige ihrer Werte. Schauen wir uns einige Möglichkeiten an, wie wir dies tun könnten.

Überprüfen Sie, ob Argumente angegeben wurden:

if [$ # == 0]; dann echo "$ 0 filename" exit 1 fi 

Überprüfen, ob ein bestimmter Prozess ausgeführt wird:

ps -ef | grep apache2> / dev / null wenn [$? ! = 0]; dann läuft echo Apache nicht exit fi 

Überprüfen Sie, ob eine Datei vorhanden ist, bevor Sie versuchen, darauf zuzugreifen:

if [$ # -lt 2]; dann echo "Verwendung: $ 0 Zeilen Dateiname" exit 1 fi wenn [! -f $ 2]; dann echo "Fehler: Datei $ 2 nicht gefunden" exit 2 else head - $ 1 $ 2 fi 

In diesem kleinen Skript prüfen wir, ob die richtige Anzahl von Argumenten angegeben wurde, ob das erste Argument numerisch ist und ob das zweite Argument eine vorhandene Datei ist.

#! / bin / bash if [$ # -lt 2]; dann echo "Verwendung: $ 0 Zeilen Dateiname" exit 1 fi wenn [[$ 1! = [0-9] *]]; dann echo "Fehler: $ 1 ist nicht numerisch" exit 2 fi wenn [! -f $ 2]; dann echo "Fehler: Datei $ 2 nicht gefunden" exit 3 sonst echo oben am Dateikopf - $ 1 $ 2 fi 

Variablen umbenennen

Wenn Sie ein kompliziertes Skript schreiben, ist es oft nützlich, den Argumenten des Skripts Namen zuzuweisen, anstatt sie weiterhin als $ 1, $ 2 usw. zu bezeichnen. In der 35. Zeile hat jemand, der Ihr Skript liest, möglicherweise vergessen, was 2 US-Dollar bedeuten. Für diese Person ist es viel einfacher, wenn Sie $ filename oder $ numlines den Wert eines wichtigen Parameters zuweisen.

#! / bin / bash if [$ # -lt 2]; dann echo "Verwendung: $ 0 Zeilen Dateiname" exit 1 sonst numlines = $ 1 Dateiname = $ 2 fi wenn [[$ numlines! = [0-9] *]]; dann echo "Fehler: $ numlines ist nicht numerisch" exit 2 fi wenn [! -f $ Dateiname]; dann echo "Fehler: Datei $ Dateiname nicht gefunden" exit 3 sonst echo oben im Dateikopf - $ numlines $ Dateiname fi 

In diesem Beispielskript wird natürlich nur der Befehl head ausgeführt, um die obersten X-Zeilen in einer Datei anzuzeigen. Es soll jedoch zeigen, wie interne Parameter in Skripten verwendet werden können, um sicherzustellen, dass das Skript ordnungsgemäß ausgeführt wird oder zumindest fehlschlägt etwas Klarheit.

[Sehen Sie sich die zweiminütigen Linux-Tipps von Sandra Henry-Stocker an, um zu lernen, wie Sie eine Vielzahl von Linux-Befehlen beherrschen.] Treten Sie den Network World-Communitys auf Facebook und LinkedIn bei, um Kommentare zu Themen abzugeben, die im Vordergrund stehen.