Nie wiem, jak dołączyć opcjonalne argumenty / flagi podczas pisania skryptu bash dla następującego programu:
Program wymaga dwóch argumentów:
run_program --flag1 <value> --flag2 <value>
Istnieje jednak kilka opcjonalnych flag:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
Chciałbym uruchomić skrypt bash, aby pobierał argumenty użytkownika. Jeśli użytkownicy wprowadzą tylko dwa argumenty w kolejności, będzie to:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
Ale co, jeśli uwzględniony zostanie którykolwiek z opcjonalnych argumentów? Myślałbym, że tak będzie
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
Ale co, jeśli podano 4 USD, ale nie 3 USD?
getopts
, musiałbym podać każdą kombinację argumentów? 3 i 4, 3 i 5, 3 i 4 i 5 itd.?
getopts
. Powiedzmy, że zmuszam użytkowników do uruchomienia skryptu ze wszystkimi argumentami: run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
który uruchamia program jako program --flag1 VAL --flag2 VAL
. Jeśli uruchomiłeś run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
, program działałby jako program --flag1 VAL --flag2 VAL --optflag2 10
. Jak możesz uzyskać takie zachowanie getopts
?
getopts
jest tym, czego chcesz. Bez tego można użyć pętli z instrukcją switch do wykrycia każdej flagi, opcjonalnie lub nie.