Grundlagen des Verständnisses von Befehlszeilenargumenten
Bevor wir uns mit getopt befassen, verstehen wir, wie Bash-Skripte normalerweise Befehlszeilenargumente verarbeiten. In Bash sind die Argumente, die Sie an ein Skript übergeben, über spezielle Variablen zugänglich:
$0
: Der Name des Skripts selbst
$1
, $2
, $3
, etc.: Die ersten, zweiten, dritten usw. Positionsargumente
$#
: Die Anzahl der an das Skript übergebenen Argumente
$@
: Alle an das Skript übergebenen Argumente
Lassen Sie uns ein einfaches Skript erstellen, um diese grundlegende Verarbeitung von Befehlszeilenargumenten zu demonstrieren.
Erstellen Ihres ersten Skripts
-
Öffnen Sie das Terminal in Ihrer LabEx-Umgebung.
-
Navigieren Sie zum Projektverzeichnis:
cd ~/project
-
Erstellen Sie eine neue Datei namens basic_args.sh
mit dem Editor:
touch basic_args.sh
-
Öffnen Sie die Datei im Editor und fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
echo "Skriptname: $0"
echo "Erstes Argument: $1"
echo "Zweites Argument: $2"
echo "Drittes Argument: $3"
echo "Gesamtzahl der Argumente: $#"
echo "Alle Argumente: $@"
-
Machen Sie das Skript ausführbar:
chmod +x basic_args.sh
-
Führen Sie das Skript mit einigen Argumenten aus:
./basic_args.sh apple banana cherry
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Skriptname:./basic_args.sh
Erstes Argument: apple
Zweites Argument: banana
Drittes Argument: cherry
Gesamtzahl der Argumente: 3
Alle Argumente: apple banana cherry
Limitationen der grundlegenden Argumentverarbeitung
Während dieser grundlegende Ansatz für einfache Skripte funktioniert, hat er mehrere Limitationen:
- Keine Unterscheidung zwischen Optionen (wie
-f
oder --file
) und regulären Argumenten
- Keine Möglichkeit, Optionen zu verarbeiten, die eigene Argumente haben
- Kein standardisierter Weg, um die Benutzereingabe zu validieren
- Schwierigkeiten, sowohl kurze als auch lange Optionen zu implementieren
Beispielsweise würden Sie für ein Skript, das auf folgende Weise aufgerufen werden kann:
./myscript.sh -f file.txt -o output.txt --verbose
manuell jedes Argument analysieren müssen, um zu bestimmen, ob es eine Option ist oder nicht, und die zugehörigen Parameter verarbeiten. Dies wird schnell komplex und fehleranfällig.
Hier kommt der getopt
-Befehl ins Spiel. Er bietet einen standardisierten Weg, um Befehlszeilenoptionen und -argumente in Bash-Skripten zu verarbeiten.