A maneira usual de manipular switches e argumentos é com a função getopts
. Em bash
este é um builtin e você pode encontrar informações sobre ele na página man bash ( man bash
).
Essencialmente, você declara uma string que informa a getopts
quais parâmetros esperar, e se eles devem ter um argumento. É getopts
que lida com parâmetros agrupados (por exemplo, -abc
sendo equivalente a -a -b -c
) e a análise da linha de comando. No final do processamento de getopts
, você tem o restante da linha de comando para manipular como quiser.
Um segmento de script típico pode ser parecido com isso
ARG_A= FLAG_B= FLAG_C=
while getopts 'a:bc' OPT # -a {argument}, -b, -c
do
case "$OPT" in
a) ARG_A="$OPTARG" ;;
b) FLAG_B=yes ;;
c) FLAG_C=yes ;;
*) echo "ERROR: the options are -a {arg}, -b, -c" >&2; exit 1 ;;
esac
done
shift $(($OPTIND - 1))
echo "Remaining command line: $*"
Você pode adicionar ?
como uma opção de comando se quiser uma mensagem de uso legal . Lembre-se de que no bloco case
você precisaria citar ou prefixar com uma barra invertida, de modo que seja tratado como um literal.
Se você deseja executá-lo com um shell diferente que não tenha o builtin, ou se deseja usar argumentos longos como --verbose
em vez de apenas -v
take uma olhada no utilitário getopt
. Este não é um builtin, mas foi escrito para entregar na situação mais sofisticada.