Bash Script mit Parametern?
Hallo,
ich arbeite zur Zeit an einem kleinen Bash Script und frage mich, wie man das folgende Problem löst. Ich rufe mein Script z.B. so auf:
bash script.sh --givenname max --lastname mustermann
man soll es aber auch als
bash script.sh --lastname mustermann --givenname max
aufrufen können. Das Problem ist, dass ich nicht einfach statisch "$1" und "$2" für den Vornamen und "$3" und "$4" für den Nachnamen verwenden kann. Wie kann ich die Parameter einfach nach z.B. "--lastname" durchsuchen, die Position davon erfragen, also z.B. --lastname ist dann "$1", dann weiß ich, der String für den Nachname ist "$2". Ich hoffe mein Problem ist verständlich und danke für alle Antworten im Voraus.
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"
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.
Stimmt, da hast du recht.
Bei
script.sh --falscheOption --givenname max --lastname mustermann
würde mein Beispiel abbrechen und deines die richtige Ausgabe liefern.
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. )
Schau dir das mal an: https://www.brianchildress.co/named-parameters-in-bash/
Vielleicht besser ein: