So verwenden Sie GETOPTS, um ein Skriptoptionen zu analysieren
- 4973
- 671
- Levke Harnapp
Zielsetzung
Erfahren Sie, wie man die Bash benutzt Getopts
integriert, um ein Skriptoptionen zu analysieren
Betriebssystem- und Softwareversionen
- Betriebssystem: - Alle Linux -Verteilungen
Anforderungen
- Keine besonderen Anforderungen, nur Zugang zu einer Bash -Shell
Schwierigkeit
MITTEL
Konventionen
- # - Erfordert, dass gegebene Linux -Befehle entweder mit Root -Berechtigungen ausgeführt werden müssen
direkt als Stammbenutzer oder durch Verwendung vonsudo
Befehl - $ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können
Einführung
Das Ändern eines Bash -Skriptverhaltens über Laufzeitoptionen, genau wie wir es normalerweise mit Befehlszeilenprogrammen tun, kann sehr nützlich sein. Die Bash Shell liefert die Getopts
BEBRECHTER Befehl, eine Standardmethode, um dies zu erreichen. Wie man es benutzt, ist das, was wir in diesem Tutorial lernen werden.
Erstellen unseres Testskripts
Für dieses Tutorial werden wir ein Testskript erstellen, und mit viel Fantasie werden wir es nennen prüfen.Sch
. Der Zweck dieses Skripts besteht darin, etwas abhängig von der Option auszugeben, die wir bereitstellen werden (es wird nicht das nützlichste Skript der Welt sein, aber es wird ausreichen, um zu erklären, wie die Dinge funktionieren).
Öffnen wir unseren Texteditor und beginnen Sie:
#!/bin/bash set -e set -u set -o pipefail
Die bereitgestellten Shell -Optionen zu Beginn der Skripte sind nicht obligatorisch, aber es ist eine gute Angewohnheit, sie in jedem Skript zu verwenden, das wir schreiben. In Kürze, -e
, kurz für Errexit
ändert das Verhalten der Shell, das beendet, wenn ein Befehl mit einem Null -Null -Status beendet wird (mit einigen Ausnahmen). -u
ist eine weitere sehr wichtige Option: Dadurch wird die Shell zur Behandlung undefinierter Variablen als Fehler behandelt.
Endlich, das Rohrfail
ändert die Art und Weise, wie Befehle in einem Rohr bewertet werden. Der Exit -Status eines Rohrs ist der des Befehl. Mit anderen Worten, die Pfeife wird als erfolgreich angesehen, wenn alle beteiligten Befehle ohne Fehler ausgeführt werden.
Das GetOpts -Konstrukt
Nach dieser kurzen Exkurs kehren wir zum Hauptpunkt dieses Tutorials zurück und sehen Sie, wie Getopts
Werke:
#!/bin/bash set -e set -u set -o pipefail während getopts 'lha:' option; do case "$ option" in l) echo "linuxconfig" ;; h) echo "H steht für H" ;; a) avalue = "$ optarg" echo "Der bereitgestellte Wert ist $ optarg" ;; ?) Echo "Skriptsutz: $ (BasisName \ $ 0) [-l] [-h] [-a irgendwann]"> & 2 Exit 1 ;; ESAC DESTELSCHAFT "$ (($ optind -1))"
Lassen Sie uns analysieren, was wir oben haben. Zuerst Getopts
Befehle müssen in a verwendet werden während
Schleife, damit alle Optionen analysiert werden. Dann unmittelbar nach dem Getopts
Schlüsselwort, wir haben die möglichen Optionen definiert, die unser Skript akzeptiert wird. Sie sind l
, H
und schlussendlich A
.
Was bedeutet der Dickdarm nach dieser letzten Option?? So sagen wir GetOpts, dass die Option ein Argument erfordert. Jede analysierte Option wird in der gespeichert $ Option
Variable wird zwar ein Argument, wenn es anwesend ist, der Wert der$ Optarg
eins.
Jede Option wird in einer Fallanweisung mit einem endgültigen verwaltet ?
Der Fall, der bei einer Option übereinstimmt, die nicht vorhanden ist, wird zur Verfügung gestellt. In diesem Fall werden wir dem Benutzer nur die richtige Skriptsutzung wiederholen und mit einem Fehlercode beenden.
Unser Skript testen
Zunächst werden wir unser Skript anrufen, das eine nicht vorhandene Option bietet, um den oben genannten Fall zu testen. Geben wir dem Skript ausführbaren Berechtigungen an und nennen wir es dann:
CHMOD +X -Test.Sch && ./Tesh.Sh -C
Wie erwartet erhalten wir eine Nachricht, in der wir mitteilt, dass die bereitgestellte Option illegal ist, und dann Anweisungen zur Verwendung des Skripts:
./prüfen.SH: Illegale Option - C -Skriptverbrauch: Test.sh [-l] [-h] [-a irgendwann]
Während Skriptverbrauch
String ist diejenige, die wir auf den Nutzungsfehler gedruckt haben, das oben genannte, es handelt sich um eine Meldung, die automatisch von generiert wird Getopts
und es kann deaktiviert werden, indem die Optionen mit a vorangestellt werden :
. Lassen Sie uns nun sehen, was passiert, wenn wir das Skript so verwenden, wie es gedacht war:
./prüfen.sh -l linuxconfig
Wir haben die benutzt l
Option und das Skript auf dem Bildschirm auf dem in dem entsprechenden Fall festgelegten Zeichenfolge gedruckt. Dies geschieht auch, wenn wir die angeben -H
Möglichkeit:
./prüfen.sh -h h steht für h
Versuchen wir nun, das Skript mit dem anzurufen A
Möglichkeit. Wie oben erwähnt, erfordert diese Option ein Argument und wird fehlschlagen, wenn der letztere nicht bereitgestellt wird:
./prüfen.Sh -a ./prüfen.SH: Option erfordert ein Argument - eine Skriptverwendung: Test.sh [-l] [-h] [-a irgendwann]
Wie erwartet antwortete das Skript mit einer Fehlermeldung und erinnerte uns daran, dass die Option, die wir bereitgestellt haben, ein Argument erfordert:
./prüfen.sh -a tux Der bereitgestellte Wert ist TUX
Diesmal reagierte das Skript ohne Fehler. Beachten Sie, wie das Argument, das wir vorgelegt haben, Smoking
Es wird gedruckt, weil es zum Wert der wird $ Optarg
Variable.
Verwendung Getopts
, Sie können Ihr Skript auch mehr als eine Option zur Verfügung stellen und die Flags beim Starten kombinieren. Lassen Sie uns beispielsweise sehen, was passiert, wenn wir versuchen, unsere Skripte mit beiden anzurufen l
Und H
Optionen:
./prüfen.sh -lh linuxconfig h steht für h für h
Wie wir beobachten können, wurden beide Optionen verarbeitet, in der Reihenfolge, die wir ihnen zur Verfügung gestellt haben. Des Fluches können die Optionen separat gegeben werden, und wir können auch die hinzufügen A
Option, aber immer daran erinnert, das erforderliche Argument hinzuzufügen:
./prüfen.sh -l -h -a tux_rulez linuxconfig h steht für h für h Der bereitgestellte Wert ist tux_rulez
Die $ optind Variable
Wenn wir uns das sehr triviale Skript, das wir oben geschrieben haben, noch einmal betrachten, sehen wir eine weitere Anweisung am Ende der while -Schleife: $ $ (($ optind -1))
. Was ist seine Aufgabe? Nehmen wir an, wir nennen das Skript auf diese Weise:
./prüfen.sh -l -h -a Hallo Welt
Wenn das Skript aufgerufen wird, das $ Optind
Die Variable wird auf 1 gesetzt und jedes Mal inkrementiert, wenn eine Option analysiert wird, bis sie den letzten erreicht. Daher wird es in diesem Fall einen Wert von 5 haben, wenn es das letzte Element erreicht, nämlich Hallo
, das obligatorische Argument von der -A
Möglichkeit.
Schicht
ist eine Shell integriert, die die Positionsparameter des Skripts in eine bestimmte Anzahl von Positionen als positive Zahl bewegt und die damit verbundenen Argumente verworfen.
Die Art und Weise, wie wir das obige Skript gestartet haben, lieferte das letzte Argument „Welt“ nicht von analysiert von Getopts
, was zu diesem Zeitpunkt bereits seinen Job beendete.
Wenn wir nun eine Verschiebung des Wertes von vornehmen $ Optind - 1
(Das ist die effektive Anzahl der analysierten Optionen in diesem Fall in diesem Fall) für die Positionsparameter sind nur die Argumente, die in diesem Fall keine Optionen sind, auf die wir mit der Verwendung zugreifen können $*
Variable später in diesem Skript.
Verwandte Linux -Tutorials:
- Bash -Skript: FLAGS -Nutzung mit Argumentenbeispielen
- Dinge zu installieren auf Ubuntu 20.04
- Wie man Verwaltungsoperationen mit Ansible durchführt…
- Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
- Linux -Befehle: Top 20 wichtigste Befehle, die Sie benötigen, um…
- Grundlegende Linux -Befehle
- Linux -Konfigurationsdateien: Top 30 am wichtigsten
- Linux -Download
- So drucken Sie den Verzeichnisbaum mit Linux
- Kann Linux Viren bekommen?? Erforschung der Verwundbarkeit von Linux…
- « So beschränken Sie Benutzer zugreifen auf einen Linux -Computer
- Übertakte deine Radeon -GPU mit AMDGPU »