GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Anfängerserie Nr. 3:Übergabe von Argumenten an Bash-Skripte

Argumente können nützlich sein, besonders bei Bash!

Bisher haben Sie gelernt, wie Sie Variablen verwenden, um Ihre Bash-Skripte dynamisch und generisch zu gestalten, damit sie auf verschiedene Daten und unterschiedliche Benutzereingaben reagieren.

In diesem Tutorial erfahren Sie, wie Sie Variablen von der Befehlszeile aus an Bash-Skripte übergeben können.

Kaufen Sie das E-Book „Bash schnell lernen“.

Argument an ein Bash-Shell-Skript übergeben

Das folgende Skript count_lines.sh gibt die Gesamtzahl der Zeilen aus, die in der vom Benutzer eingegebenen Datei vorhanden sind:

#!/bin/bash

echo -n "Please enter a filename: "
read filename
nlines=$(wc -l < $filename)

echo "There are $nlines lines in $filename"

Beispielsweise kann der Benutzer die Datei /etc/passwd eingeben und das Skript spuckt als Ergebnis die Anzahl der Zeilen aus:

Dieses Skript funktioniert gut; Es gibt jedoch eine viel bessere Alternative!

Anstatt den Benutzer zur Eingabe des Dateinamens aufzufordern, können wir den Benutzer dazu bringen, den Dateinamen einfach als Befehlszeilenargument zu übergeben, während das Skript wie folgt ausgeführt wird:

./count_lines.sh /etc/passwd

Auf das erste Bash-Argument (auch Positionsparameter genannt) kann innerhalb Ihres Bash-Skripts mit $1 zugegriffen werden Variable.

Daher können Sie im Skript count_lines.sh die Dateinamenvariable durch $1 ersetzen wie folgt:

#!/bin/bash

nlines=$(wc -l < $1)
echo "There are $nlines lines in $1"

Beachten Sie, dass ich auch den Read- und den First-Echo-Befehl entfernt habe, da sie nicht mehr benötigt werden!

Schließlich können Sie das Skript ausführen und eine beliebige Datei als Argument übergeben:

./count_lines.sh    /etc/group
There are 73 lines in /etc/group

Mehrere Argumente an ein Bash-Shell-Skript übergeben

Sie können mehr als ein Argument an Ihr Bash-Skript übergeben. Im Allgemeinen ist hier die Syntax zum Übergeben mehrerer Argumente an ein beliebiges Bash-Skript:

script.sh arg1 arg2 arg3  …

Auf das zweite Argument wird durch $2 verwiesen Variable, das dritte Argument wird durch $3 referenziert , .. usw.

Der $0 Variable enthält den Namen Ihres Bash-Skripts, falls Sie sich fragen!

Jetzt können wir unsere count_lines.sh bearbeiten bash-Skript, damit es die Zeilen von mehr als einer Datei zählen kann:

#!/bin/bash

n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)

echo "There are $n1 lines in $1"
echo "There are $n2 lines in $2"
echo "There are $n3 lines in $3"

Sie können das Skript jetzt ausführen und drei Dateien als Argumente an das Bash-Skript übergeben:

Wie Sie sehen können, gibt das Skript die Anzahl der Zeilen jeder der drei Dateien aus; und natürlich spielt die Reihenfolge der Argumente eine Rolle.

Mit Argumenten in der Bash-Shell kreativ werden

Es gibt eine ganze Menge Linux-Befehle.

Einige von ihnen sind etwas kompliziert, da sie möglicherweise eine lange Syntax oder eine lange Reihe von Optionen haben, die Sie verwenden können.

Glücklicherweise können Sie Bash-Argumente verwenden, um einen schwierigen Befehl in eine ziemlich einfache Aufgabe zu verwandeln!

Schauen Sie sich zur Demonstration die folgende find.sh an Bash-Skript:

#!/bin/bash

find / -iname $1 2> /dev/null

Es ist ein sehr einfaches Skript, das sich jedoch als sehr nützlich erweisen kann! Sie können dem Skript einen beliebigen Dateinamen als Argument übergeben, und es zeigt den Speicherort Ihrer Datei an:

Sie sehen, dass dies jetzt viel einfacher ist, als den gesamten Find-Befehl einzugeben! Dies ist ein Beweis dafür, dass Sie Argumente verwenden können, um jeden langen komplizierten Befehl in Linux in ein einfaches Bash-Skript umzuwandeln.

Wenn Sie sich über die 2> /dev/null wundern , bedeutet dies, dass keine Fehlermeldung (z. B. auf die Datei kann nicht zugegriffen werden) nicht auf dem Bildschirm angezeigt wird. Ich schlage vor, über die stderr-Umleitung in Linux zu lesen, um mehr über dieses Thema zu erfahren.

Bonus-Tipp:Spezielle Variablen in der Bash-Shell

Bash hat viele eingebaute spezielle Variablen, die sehr praktisch sind und Ihnen zur Verfügung stehen.

Die folgende Tabelle hebt die häufigsten speziellen eingebauten Bash-Variablen hervor:

Spezielle Variable Beschreibung
$0 Der Name des Bash-Skripts.
$1, $2...$n Die Argumente des Bash-Skripts.
$$ Die Prozess-ID der aktuellen Shell.
$# Die Gesamtzahl der an das Skript übergebenen Argumente.
[email protected] Der Wert aller an das Skript übergebenen Argumente.
$? Der Exit-Status des zuletzt ausgeführten Befehls.
$! Die Prozess-ID des zuletzt ausgeführten Befehls.

Um diese speziellen Variablen in Aktion zu sehen; Schauen Sie sich die folgende variables.sh an Bash-Skript:

#!/bin/bash

echo "Name of the script: $0"
echo "Total number of arguments: $#"
echo "Values of all the arguments: [email protected]"

Sie können jetzt beliebige Argumente übergeben und das Skript ausführen:

Okay, das bringt uns zum Ende dieses Kapitels. Ich hoffe, Sie erkennen jetzt, wie mächtig und nützlich Bash-Argumente sein können.

Brauchen Sie etwas Übung, laden Sie dieses PDF herunter und üben Sie die Übergabe von Argumenten an Bash-Skripte mit einfachen Skript-Herausforderungen. Ihre Lösungen sind ebenfalls enthalten.

Bash-Kapitel-3-ÜbungsfragenProbleme und deren Lösung zum Üben des gerade Gelernten in diesem KapitelBash-Kapitel-3-Übungsfragen-Linux-Handbuch.pdf30 KB

Sehen Sie sich danach das nächste Kapitel an, in dem ich Ihnen zeigen werde, wie Sie Arrays in Ihren Bash-Skripten erstellen und verwenden können.


Linux
  1. Fehlerbehandlung in Bash-Skripten

  2. Hinzufügen von Argumenten und Optionen zu Ihren Bash-Skripten

  3. Befehlszeilenargumente an Bash-Skript übergeben?

  4. Wie kann man Bash-Skripte in Vim hervorheben?

  5. Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

Bash Beginner Series #2:Variables in Bash Shell Scripting verstehen

Bash-Anfängerserie Nr. 1:Erstellen Sie Ihr erstes Bash-Shell-Skript und führen Sie es aus

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten

Bash-Anfängerserie Nr. 4:Verwenden von Arrays in Bash

Bash-Anfängerserie Nr. 6:Zeichenfolgenoperationen in Bash

Bash-Anfängerserie Nr. 10:Automatisierung mit Bash