Sto usando getopt
(non getops
) per fornire la possibilità per il mio script bash di elaborare opzioni e opzioni (sia long che opzione e moduli short -o).Trapping getopt opzioni non valide
Mi piacerebbe essere in grado di intercettare le opzioni non valide e gestirle, in genere echeggiando che l'utente dovrebbe provare cmd --help
e quindi uscire dallo script.
fatto è che le opzioni non valide vengono catturati da getopt, a sua volta in uscita un messaggio del tipo "getopt: opzione non valida - 'x'"
Ecco il modello che sto usando per impostare il mio getopt parametri:
set -- $(getopt -o $SHORT_OPTIONS -l $LONG_OPTIONS -- "[email protected]")
dove entrambi $ long_options e $ SHORT_OPTIONS sono un elenco delimitato da virgole di opzioni.
Ecco come ho gestire l'elaborazione delle opzioni:
while [ $# -gt 0 ]
do
case "$1" in
-h|--help)
cat <<END_HELP_OUTPUT
Help
----
Usage: ./cmd.sh
END_HELP_OUTPUT
shift;
exit
;;
--opt1)
FLAG1=true
shift
;;
--opt2)
FLAG2=true
shift
;;
--)
shift
break
;;
*)
echo "Option $1 is not a valid option."
echo "Try './cmd.sh --help for more information."
shift
exit
;;
esac
done
getopt -q
sarà sopprimere l'uscita, ma il mio sistema di intrappolamento all'interno dell'istruzione case
non riesce ancora a fare quello che mi aspetto. Invece, il programma viene eseguito, nonostante gli argomenti non validi.
In tal caso *) viene raggiunto? – jarno
@jarno Se si verifica una mancata corrispondenza tra l'istruzione 'case' e la chiamata' getopt', verrà catturata lì. È solo una programmazione difensiva. – l0b0