#!/usr/bin/env bash
#############################################################################
###########################################################################
### Created by A.M.Danischewski (c) 2017+ v1.00
### Issues: If you find any issues emai1 me at my <first name> dot
### <my last name> at gmail dot com.
###
### This is a simple effective options handler, that easily and
### automatically handles long and short options. Hack away at it! =)
###
### E.g. options_handler.bsh -e e_value -l --super s_value of default
### options_handler.bsh --extended e_value dispersed -l -s s_value default value
### This program is free software: you can redistribute it and/or modify.
###########################################################################
#############################################################################
declare -a OPTIONS
declare -A OPTIONVALUES
declare -i DEFAULT_OPTION_SET=0
declare -r DEFAULT_INDEX="default"
### This is a commandline options handler, it loads two arrays the first
### array OPTIONS holds the OPTION FLAGS that were passed. The second
### array is an associative array that holds option arguments if any
### that were passed in.
### Note: This handler does not accept spaces in long option names.
function process_options() {
while (($#>0)); do
case "$1" in
-e|--extended)
OPTIONS+=("-e")
## No argument option.
#[[ ! "$2" =~ ^- ]] && OPTIONVALUES["-e"]="$2" && shift
;;
-s|--super)
OPTIONS+=("-s")
[[ ! "$2" =~ ^- ]] && OPTIONVALUES["-s"]="$2" && shift
;;
-l|--longoption)
OPTIONS+=("-l")
[[ ! "$2" =~ ^- ]] && OPTIONVALUES["-l"]="$2" && shift
;;
--default)
;&
*)
if [[ "$1" =~ ^- ]]; then ## Handle unexpected options.
echo "*** Error option $1 not found" >&2
## Add your logic.
shift
fi
## Handle the default argument.
((! ${DEFAULT_OPTION_SET})) && OPTIONS+=("${DEFAULT_INDEX}") && DEFAULT_OPTION_SET=1
while [[ ! "$1" =~ ^- ]] && [[ $# -gt 0 ]]; do ## Look ma, no quotes. o_0
OPTIONVALUES["${DEFAULT_INDEX}"]+=" ${1}" && shift
done
[[ "$1" =~ ^- ]] && continue ## We have a flag again, skip shifting.
;;
esac
shift ## Shift to next option.
done
}
function print_options() {
for a in ${OPTIONS[@]}; do
echo "Got: $a with arg: ${OPTIONVALUES[${a}]}"
done
}
process_options "$@"
print_options
exit 0
Sunday, July 16, 2017
Bash Options Handler
Subscribe to:
Posts (Atom)