Sono confuso su come includere argomenti / flag opzionali quando si scrive uno script bash per il seguente programma:
Il programma richiede due argomenti:
run_program --flag1 <value> --flag2 <value>
Tuttavia, ci sono diversi flag opzionali:
run_program --flag1 <value> --flag2 <value> --optflag1 <value> --optflag2 <value> --optflag3 <value> --optflag4 <value> --optflag5 <value>
Vorrei eseguire lo script bash in modo tale da accettare gli argomenti dell'utente. Se gli utenti inseriscono solo due argomenti in ordine, allora sarebbe:
#!/bin/sh
run_program --flag1 $1 --flag2 $2
E se fosse incluso uno degli argomenti opzionali? Penserei che sarebbe
if [ --optflag1 "$3" ]; then
run_program --flag1 $1 --flag2 $2 --optflag1 $3
fi
Ma cosa succede se vengono dati $ 4 ma non $ 3?
getopts
, dovrei specificare ogni combinazione di argomenti? 3 e 4, 3 e 5, 3 e 4 e 5, ecc.?
getopts
. Diciamo che costringo gli utenti a eseguire lo script con tutti gli argomenti: run_program.sh VAL VAL FALSE FALSE FALSE FALSE FALSE
che esegue il programma come program --flag1 VAL --flag2 VAL
. Se eseguito run_program.sh VAL VAL FALSE 10 FALSE FALSE FALSE
, il programma verrebbe eseguito come program --flag1 VAL --flag2 VAL --optflag2 10
. Come puoi ottenere questo comportamento getopts
?
getopts
è quello che vuoi. Senza questo, è possibile utilizzare un ciclo con un'istruzione switch per rilevare ogni flag, facoltativo o meno.