Leggi qui:
http://www.tldp.org/LDP/abs/html/arrays.html

e guarda questo script:

codice:
#!/bin/bash

function usage(){
      echo >&2 ""
      echo >&2 "usage: ${0##*/} -t <days> -d <dir> [FILENAME]"
      echo >&2 ""
      exit 1;
}


ARGS=($@)
[ -z "$ARGS" ] && usage

FILETYPE=${ARGS[$(($#-1))]}
[ -z "$FILETYPE" ] && usage

#ARGS=(${ARGS[@]:0:$(($#-1))})


for GET in $(seq 0 $((${#ARGS[@]}-2))); do
      case "${ARGS[$GET]}" in

            -t)
                  DAYS=${ARGS[$(($GET+1))]}
                  [ -z $DAYS ] && usage
                  #shift; shift;
            ;;

            -d)
                  DIR=${ARGS[$(($GET+1))]}
                  [ -z $DIR ] && usage
                  #shift; shift;
            ;;

            -h|--help|?)
                  usage
            ;;

      esac
done

echo ""
echo "DAYS: $DAYS"
echo "DIR:  $DIR"
echo "FILE: $FILETYPE"
echo ""
Ovviamente, al posto dei commentati shift: shift; devi trovare un modo per eliminare gli elementi che trovi dall'array $ARGS in modo da poter inserire il caso di default *);;

C'e' shift perche' usavo questo modello per i parametri posizionali, ma come vedi $@ è memorizzato come array quindi le regole sono quelle degli array.