Bash Script mit Parametern?

2 Antworten

#!/bin/bash

while : ; do
    case "$1" in
        --lastname ) Lastname=$2; shift 2 ;;
        --givenname ) Givenname=$2; shift 2 ;;
        * ) break ;;
    esac
done

echo "Hallo $Givenname $Lastname"

Ansonsten kannst du dazu auch getopts (glaube nur für kurze Optionen) oder getopt verwenden.

Ergänzung, besser wäre (siehe Kommentar KarlRanseierIII):

#!/bin/bash

while (( $# )) ; do
    case "$1" in
        --lastname ) Lastname=$2; shift 2 ;;
        --givenname ) Givenname=$2; shift 2 ;;
        * ) shift ;;
    esac
done

echo "Hallo $Givenname $Lastname"

KarlRanseierIII  03.09.2021, 21:12

Vielleicht besser ein:

while (( $# )); do
1
KarlRanseierIII  03.09.2021, 21:29
@andie00

Bei *) könnte ich dann shiften, statt zu breaken - die Schleife konsumiert dann stur alle Parameter, während sie die matchenden rauspickt.

Ist eine Frage des gwünschten Verhaltens.

1
andie00  03.09.2021, 21:34
@KarlRanseierIII

Stimmt, da hast du recht.

Bei

script.sh --falscheOption --givenname max --lastname mustermann

würde mein Beispiel abbrechen und deines die richtige Ausgabe liefern.

1
KarlRanseierIII  03.09.2021, 21:36
@andie00

Wie gesagt, alles eine Frage der exaten Anforderung, aber unbekanntes zu ignorieren erhöht meistens die Robustheit. (Man kann ja immernoch ne Warnung nach stderr schreiben :-D. )

1