So übergeben Sie Argumente an ein Bash-Skript

Befehle, Syntax und Beispiele

Schreiben Sie ein Bash-Skript, damit es Argumente empfängt, die beim Aufruf des Skripts über die Befehlszeile angegeben werden. Verwenden Sie diese Methode, wenn ein Skript abhängig von den Werten der Eingabeparameter, auch Argumente genannt, eine etwas andere Funktion ausführen muss.

Beispiel für die Übergabe von Argumenten in einem Bash-Skript

Wenn Sie ein Skript mit dem Namen stats.sh entwickelt haben , das die Wörter in einer Datei zählt, ist es am besten, den Dateinamen als Argument zu übergeben, damit für alle zu verarbeitenden Dateien dasselbe Skript verwendet werden kann. Wenn der Name der zu verarbeitenden Datei beispielsweise die Songliste ist, geben Sie Folgendes in die Befehlszeile ein:

sh stats.sh songlist

Der Zugriff auf Argumente erfolgt innerhalb eines Skripts mit den Variablen $ 1, $ 2, $ 3 usw. Die Variable $ 1 bezieht sich auf das erste Argument, $ 2 auf das zweite Argument und $ 3 auf das dritte Argument. Dies wird im folgenden Beispiel veranschaulicht:

DATEI1 = $ 1
wc $ FILE1

Weisen Sie aus Gründen der Lesbarkeit dem Wert des ersten Arguments ($ 1) eine Variable mit einem beschreibenden Namen zu, und rufen Sie dann das Dienstprogramm für die Wortzählung (WC) für die Variable $ FILE1 auf.

Wenn Sie eine variable Anzahl von Argumenten haben, verwenden Sie die Variable $ @, bei der es sich um ein Array aller Eingabeparameter handelt. In dieser Prozedur wird eine for-Schleife verwendet, um jede Schleife iterativ zu verarbeiten, wie im folgenden Beispiel dargestellt:

für DATEI1 in "$ @"
tun
wc $ FILE1
erledigt

Hier ist ein Beispiel, wie dieses Skript mit Argumenten über die Befehlszeile aufgerufen wird:

sh stats.sh songlist1 songlist2 songlist3

Wenn ein Argument Leerzeichen enthält, setzen Sie es in einfache Anführungszeichen. Zum Beispiel:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Flags-Methode

Häufig wird ein Skript geschrieben, damit Argumente mit Hilfe von Flags in beliebiger Reihenfolge übergeben werden können. Mit der flags-Methode können einige der Argumente optional angegeben werden.

Sie möchten beispielsweise ein Skript schreiben, das Informationen aus einer Datenbank basierend auf angegebenen Parametern wie Benutzername, Datum und Produkt abruft und einen Bericht in einem angegebenen Format generiert. Das Skript muss so geschrieben sein, dass diese Parameter beim Aufruf des Skripts übergeben werden. Es könnte so aussehen:

makereport -u jsmith -p notebooks -d 10-20-2011 -f pdf

Bash aktiviert diese Funktionalität mit der Funktion getopts. Verwenden Sie für das obige Beispiel getopts wie folgt:

während getopts u: d: p: f: option
tun
case "$ {option}"
im
u) USER = $ {OPTARG} ;;
d) DATE = $ {OPTARG} ;;
p) PRODUCT = $ {OPTARG} ;;
f) FORMAT = $ {OPTARG} ;;
esac
erledigt

Dies ist eine while-Schleife, die die Funktion getopts und einen sogenannten Optstring verwendet - in diesem Fall u: d: p: f: -, um die Argumente zu durchlaufen. Die while-Schleife durchläuft den Optstring, der die Flags enthält, die zum Übergeben von Argumenten verwendet werden, und weist der Variablenoption den für dieses Flag bereitgestellten Argumentwert zu. Die CASE-Anweisung weist dann einer globalen Variablen den Wert der Variablenoption zu, die verwendet wird, nachdem alle Argumente gelesen wurden.

Bedeutungen für Doppelpunkte

Die Doppelpunkte in der Zeichenkette bedeuten, dass für die entsprechenden Flags Werte erforderlich sind. Im obigen Beispiel von u: d: p: f: wird auf alle Flags ein Doppelpunkt gefolgt. Dies bedeutet, dass alle Flags einen Wert benötigen. Wenn zum Beispiel nicht erwartet würde, dass die d- und f-Flags einen Wert haben, wäre u: dp: f der Optstring.

Ein Doppelpunkt am Anfang der Zeichenkette (zum Beispiel: u: d: p: f :) hat eine ganz andere Bedeutung. Es behandelt Flags, die nicht im Optstring dargestellt sind. In diesem Fall wird der Wert der Optionsvariablen auf? Gesetzt. und der Wert von OPTARG wird auf das unerwartete Flag gesetzt. Dieses Verhalten zeigt eine geeignete Fehlermeldung an, die Sie über den Fehler informiert.

Argumente, denen kein Flag vorangestellt ist, werden von getopts ignoriert. Wenn beim Aufruf des Skripts keine in der Zeichenfolge angegebenen Flags bereitgestellt werden, geschieht nichts, es sei denn, Sie behandeln diesen Fall in Ihrem Code speziell. Alle Argumente, die nicht von getops verarbeitet werden, können weiterhin mit den regulären Variablen $ 1, $ 2 und $ 3 erfasst werden.