Experimente o tamanho:
#!/bin/bash
pleasereset=1
while test -n "$1"; do
pleaseshift=0
[[ pleasereset -eq 1 ]] && thisvar=$1 && pleasereset=0;
case "$thisvar" in
-o*|--override) echo "override!"; pleaseshift=1;;
-r*|--reset) echo "reset!"; pleaseshift=1;;
-h*|--help) echo "help!"; pleaseshift=1;;
*) break ;;
esac
if [[ "$pleaseshift" = "1" ]];
then
testvar=${thisvar##-}
if [[ ${#testvar} -gt 1 ]] && [[ ! ${thisvar} = --* ]];
then
thisvar=-$( echo "$testvar" | cut -c 2- )
else
shift 1; pleasereset=1;
fi
fi
done
Observe que no primeiro parâmetro que não corresponde a nenhum caso específico, a análise de parâmetro será interrompida, portanto, ./foobar.sh -o --help -s -r
não processará o -r
. Isso pode ser ajustado alterando a linha *) break;;
para o tratamento de erros, mas lembre-se de colocar o pleaseshift=1
!