O comando shift
está mal colocado. Deve estar fora do loop while
. Experimente:
while getopts :qh opt; do
case "${opt}" in
q)
quiet="true"
;;
h)
usage
exit 1
;;
\?)
echo "unrecognized option -- ${OPTARG}"
exit 1
;;
esac
done
shift $((OPTIND - 1))
echo "unparsed: $*"
Exemplos
Se adicionarmos a seguinte linha ao início do código:
usage() { echo "this is my help message"; }
Então podemos fazer estes testes:
$ ./a.sh -q -foo
unrecognized option -- f
$ ./a.sh -q -h
this is my help message