Eu usaria getopt
em vez de getopts
:
#!/usr/bin/env bash
OPT=$(getopt \
--options a:c:d:De:rs: \
--name "$0" \
-- "$@"
)
if [ $? -ne 0 ]; then
echo You are doing it wrong!
exit 1
fi
eval set -- "${OPT}"
while true; do
case "$1" in
-a) app=${2}; shift 2;;
-c) cmd=${2}; shift 2;;
-d) domain=${2}; shift 2;;
-D) Debug=1; shift;;
-e) env=${2}; shift 2;;
-r) Doit=1; shift;;
-s) subapp=${2}; shift 2;;
--) break;;
esac
done
echo "Env: ${env}"
echo "App: ${app}"
echo "Subapp: ${subapp}"
echo "Cmd: ${cmd}"
echo "Doit: ${Doit}"
echo "Debug: ${Debug}"
$ ./mwctl -a weblogic -c start -s admin -e trn -r -D
> Env: trn
> App: weblogic
> Subapp: admin
> Cmd: start
> Doit: 1
> Debug: 1
$ ./mwctl -D -a weblogic -c start admin -e trn -r
> Env: trn
> App: weblogic
> Subapp:
> Cmd: start
> Doit: 1
> Debug: 1
Observe que quando você está pesquisando getopts
vs. getopt
, você encontrará muitas pessoas reclamando sobre getopt
. Tanto quanto eu posso dizer, isso é sempre sobre uma versão mais antiga do getopt
, que na verdade foi muito bugs. Minha experiência é que getopt
tem mais opções e também é mais robusto que getopts
.
Para verificar se você tem a versão getopt
aprimorada, é possível executar
getopt -T
echo $?
Se a saída for 4
, você terá a versão aprimorada.