Este artigo mostra duas maneiras diferentes - shift
e getopts
(e discute as vantagens e desvantagens do duas abordagens).
Com shift
, o script analisa $1
, decide qual ação executar e, em seguida, executa shift
, movendo $2
para $1
, $3
para $2
, etc.
Por exemplo:
while :; do
case $1 in
-a|--flag1) flag1="SET"
;;
-b|--flag2) flag2="SET"
;;
-c|--optflag1) optflag1="SET"
;;
-d|--optflag2) optflag2="SET"
;;
-e|--optflag3) optflag3="SET"
;;
*) break
esac
shift
done
Com getopts
, você define as opções (curtas) na expressão while
:
while getopts abcde opt; do
case $opt in
a) flag1="SET"
;;
b) flag2="SET"
;;
c) optflag1="SET"
;;
d) optflag2="SET"
;;
e) optflag3="SET"
;;
esac
done
Obviamente, estes são apenas snippets de código, e deixei de fora a validação - verificando se os argumentos obrigatórios flag1 e flag2 estão definidos, etc.
Qual abordagem você usa é, até certo ponto, uma questão de gosto - quão portátil você quer que seu script seja, se você pode viver apenas com opções curtas (POSIX) ou se deseja opções longas (GNU), etc. p>