Sie können ein Bash-Skript so schreiben, dass es Argumente erhält, die beim Aufruf des Skripts über die Befehlszeile angegeben wurden. Diese Methode wird verwendet, wenn ein Skript abhängig von den Werten der Eingabeparameter (den Argumenten) eine etwas andere Funktion ausführen muss.
Beispielsweise haben Sie möglicherweise ein Skript namens "stats.sh", das eine bestimmte Operation für eine Datei ausführt, beispielsweise das Zählen ihrer Wörter. Wenn Sie dieses Skript für viele Dateien verwenden möchten, geben Sie den Dateinamen am besten als Argument an, damit Sie dasselbe Skript für alle zu verarbeitenden Dateien verwenden können. Wenn der Name der zu bearbeitenden Datei beispielsweise "Songlist" ist, geben Sie die folgende Befehlszeile ein:
sh stats.sh songlist
Auf Argumente wird innerhalb eines Skripts mit den Variablen $ 1, $ 2, $ 3 usw. zugegriffen, wobei $ 1 auf das erste Argument, $ 2 auf das zweite Argument usw. verweist. Dies wird im folgenden Beispiel veranschaulicht: FILE1 = $ 1wc $ FILE1
Um die Lesbarkeit zu verbessern, weisen Sie dem Wert des ersten Arguments ($ 1) eine Variable mit einem beschreibenden Namen zu, und rufen Sie dann das Dienstprogramm Word Count (wc) für diese Variable ($ FILE1) auf. Wenn Sie eine variable Anzahl von Argumenten haben, können Sie die Variable "$ @" verwenden, bei der es sich um ein Array aller Eingabeparameter handelt. Das bedeutet, dass Sie eine for-Schleife verwenden können, um jede iterativ zu verarbeiten, wie im folgenden Beispiel veranschaulicht: für FILE1 in "$ @"tunwc $ FILE1erledigt
Hier ein Beispiel, wie Sie dieses Skript mit Argumenten von der Befehlszeile aus aufrufen können: sh stats.sh songlist1 songlist2 songlist3
Wenn ein Argument Leerzeichen enthält, müssen Sie es in einfache Anführungszeichen setzen. Zum Beispiel: sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'
Häufig wird ein Skript so geschrieben, dass der Benutzer mit Flags Argumente in beliebiger Reihenfolge übergeben kann. Mit der flags-Methode können Sie einige der Argumente optional machen. Angenommen, Sie verfügen über ein Skript, das Informationen aus einer Datenbank basierend auf angegebenen Parametern wie "Benutzername", "Datum" und "Produkt" abruft und einen Bericht in einem angegebenen "Format" generiert. Jetzt möchten Sie Ihr Skript schreiben, damit Sie diese Parameter beim Aufruf des Skripts übergeben können. Es könnte so aussehen: makereport -u jsmith -p notebooks -d 10-20-2011 -f pdf
Bash ermöglicht diese Funktionalität mit der "getopts" -Funktion. Für das obige Beispiel können Sie getopts wie folgt verwenden: während getopts u: d: p: f: OptiontunFall "$ {Option}"imu) USER = $ {OPTARG} ;;d) DATE = $ {OPTARG} ;;p) PRODUCT = $ {OPTARG} ;;f) FORMAT = $ OPTARG ;;esacerledigt
Dies ist eine while-Schleife, die die Funktion "getopts" und eine sogenannte "optstring" verwendet, in diesem Fall "u: d: p: f:", um die Argumente zu durchlaufen. Die while-Schleife durchläuft das Optionsfeld, das die Flags enthält, die zum Übergeben von Argumenten verwendet werden können, und weist der Variablen "Option" den für dieses Flag angegebenen Argumentwert zu. Die case-Anweisung weist dann den Wert der Variablen "option" einer globalen Variablen zu, die verwendet werden kann, nachdem alle Argumente gelesen wurden. Die Doppelpunkte in der Option bedeuten, dass Werte für die entsprechenden Flags erforderlich sind. Im obigen Beispiel folgt auf alle Flags ein Doppelpunkt: "u: d: p: f:". Das bedeutet, alle Flags benötigen einen Wert. Wenn zum Beispiel nicht erwartet wird, dass die Flags "d" und "f" einen Wert haben, lautet die Option "u: dp: f". Ein Doppelpunkt am Anfang des Optstrings, beispielsweise ": u: d: p: f:", hat eine völlig andere Bedeutung. Damit können Sie Flags behandeln, die nicht im Optstring dargestellt werden. In diesem Fall wird der Wert der Variablen "Option" auf "?" Gesetzt. und der Wert von "OPTARG" wird auf das unerwartete Flag gesetzt. Mit können Sie eine entsprechende Fehlermeldung anzeigen, die den Benutzer über den Fehler informiert. Argumente, denen kein Flag vorangestellt ist, werden von getopts ignoriert. Wenn beim Aufruf des Skripts keine in der Optionsfolge angegebenen Flags angegeben werden, geschieht nichts, es sei denn, Sie behandeln diesen Fall in Ihrem Code besonders. Argumente, die nicht von getops verarbeitet werden, können weiterhin mit den regulären Variablen $ 1, $ 2 usw. erfasst werden.