Analysieren von Befehlszeilenargumenten in Bash

Fumbani Banda 19 Januar 2022
  1. Parsen von Positionsparametern in Bash
  2. Parsen von Argumenten mit Flags in Bash
  3. Parsen von Argumenten mit einem Schleifenkonstrukt in Bash
  4. Parsen von Argumenten mit shift in Bash
Analysieren von Befehlszeilenargumenten 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
Fumbani Banda avatar Fumbani Banda avatar

Fumbani is a tech enthusiast. He enjoys writing on Linux and Python as well as contributing to open-source projects.

LinkedIn GitHub