Analysieren von Befehlszeilenargumenten in Bash
- Parsen von Positionsparametern in Bash
- Parsen von Argumenten mit Flags in Bash
- Parsen von Argumenten mit einem Schleifenkonstrukt in Bash
-
Parsen von Argumenten mit
shift
in Bash
In diesem Tutorial wird das Parsen von Befehlszeilenargumenten in ein Bash-Skript als Positionsparameter unter Verwendung von Flags, Schleifenkonstrukten und Verschiebungsoperatoren veranschaulicht.
Parsen von Positionsparametern in Bash
Auf Positionsparameter wird in der Reihenfolge zugegriffen, in der sie an das Bash-Skript übergeben werden. Auf den ersten Parameter wird mit $1
zugegriffen, auf den zweiten mit $2
und so weiter.
echo "I am $1";
echo "And I live in $2";
Führen Sie das Skript mit zwei Positionsargumenten aus:
bash positional_args.sh John USA
Ausgabe:
I am John
And I live in USA
Parsen von Argumenten mit Flags in Bash
Ein Flag beginnt mit einem Bindestrich -
vor jedem Argument. Die Reihenfolge der Argumente spielt keine Rolle, wenn Flags verwendet werden.
Im folgenden Skript liest getopts
die Flags aus der Eingabe und OPTARG
ordnet sie dem entsprechenden Wert zu.
while getopts n:c: flag
do
case "${flag}" in
n) name=${OPTARG};;
c) country=${OPTARG}
esac
done
echo "I am $name";
echo "And I live in $country";
Lauf:
bash flags.sh -n fumbani -c Malawi
Ausgabe:
I am fumbani
And I live in Malawi
Parsen von Argumenten mit einem Schleifenkonstrukt in Bash
Das Schleifenkonstrukt ist nützlich, wenn die Argumentgröße nicht im Voraus bekannt ist. Das $@
ist eine Variable, die alle Eingabeparameter enthält. Die for
-Schleife durchläuft alle Argumente und verarbeitet jedes übergebene Argument.
i=1
for arg in "$@"
do
printf "argument $i: $arg\n"
i=$((i + 1 ))
done
Lauf:
bash arguments_loop.sh USA Europe Africa Asia
Ausgabe:
argument 1: USA
argument 2: Europe
argument 3: Africa
argument 4: Asia
Parsen von Argumenten mit shift
in Bash
Der Operator shift
bewirkt, dass die Indizierung der Argumente an der verschobenen Position beginnt. In unserem Fall verschieben wir die Argumente um 1
, bis wir das Ende erreichen. $#
bezieht sich auf die Eingabegröße und $1
bezieht sich jeweils auf das nächste Argument.
i=1
max=$#
while (( $i <= $max ))
do
printf "Argument $i: $1\n"
i=$((i + 1 ))
shift 1
done
Lauf:
bash shift.sh one two three
Ausgabe:
Argument 1: one
Argument 2: two
Argument 3: three