options() { # return values typeset OPTIONS_WRONG_ARGS=1 # Initialisation typeset opts argname num options_unknown_option= options_missing_arg= options_shift_val=0 options_num_args_left=0 # ensure we have at least 2 arguments (getopts # spec and at least one other) [ $# -gt 1 ] || return $OPTIONS_NO_ARGS opts=":$1" # get the getopts option # argument and add a leading shift # colon to stop getopts # printing error messages OPTERR=0 OPTIND=1 while getopts $opts argname do if [ "$argname" = "?" ] then # code handles bash getopts bug if echo $opts | grep $OPTARG >/dev/null 2>&1 then # option is really known so it must options_missing_arg=$OPTARG # have a # missing arg else options_unknown_option=$OPTARG fi continue fi if [ "$argname" = ":" ] then options_missing_arg=$OPTARG continue fi if [ "$OPTARG" != "" ] then eval opt_$argname=$OPTARG # set option name # to value else eval opt_$argname=1 # set option name to 1 fi done