diff --git a/Parse command line options.sh b/Parse command line options.sh new file mode 100644 index 0000000..0413db9 --- /dev/null +++ b/Parse command line options.sh @@ -0,0 +1,24 @@ +# Parse command line options +# =========================================================================== # +# This is an example script for using both long and short flags without using getopt (which is nonstandard) +# Copy paste from +# https://stackoverflow.com/questions/402377/using-getopts-to-process-long-and-short-command-line-options + +die() { echo "$*" >&2; exit 2; } # complain to STDERR and exit with error +needs_arg() { if [ -z "$OPTARG" ]; then die "No arg for --$OPT option"; fi; } + +while getopts ab:c-: OPT; do + if [ "$OPT" = "-" ]; then # long option: reformulate OPT and OPTARG + OPT="${OPTARG%%=*}" # extract long option name + OPTARG="${OPTARG#$OPT}" # extract long option argument (may be empty) + OPTARG="${OPTARG#=}" # if long option argument, remove assigning `=` + fi + case "$OPT" in + a | alpha ) ALPHA=true ;; + b | bravo ) needs_arg; BRAVO="$OPTARG" ;; + c | charlie ) CHARLIE=true ;; + ??* ) die "Illegal option --$OPT" ;; # bad long option + \? ) exit 2 ;; # bad short option (error reported via getopts) + esac +done +shift $((OPTIND-1)) # remove parsed options and args from $@ list \ No newline at end of file