mirror of https://github.com/tLDP/LDP
124 lines
3.1 KiB
Bash
124 lines
3.1 KiB
Bash
#!/bin/bash
|
|
# UseGetOpt.sh
|
|
|
|
# Author: Peggy Russell <prusselltechgroup@gmail.com>
|
|
|
|
UseGetOpt () {
|
|
declare inputOptions
|
|
declare -r E_OPTERR=85
|
|
declare -r ScriptName=${0##*/}
|
|
declare -r ShortOpts="adf:hlt"
|
|
declare -r LongOpts="aoption,debug,file:,help,log,test"
|
|
|
|
DoSomething () {
|
|
echo "The function name is '${FUNCNAME}'"
|
|
# Recall that $FUNCNAME is an internal variable
|
|
#+ holding the name of the function it is in.
|
|
}
|
|
|
|
inputOptions=$(getopt -o "${ShortOpts}" --long \
|
|
"${LongOpts}" --name "${ScriptName}" -- "${@}")
|
|
|
|
if [[ ($? -ne 0) || ($# -eq 0) ]]; then
|
|
echo "Usage: ${ScriptName} [-dhlt] {OPTION...}"
|
|
exit $E_OPTERR
|
|
fi
|
|
|
|
eval set -- "${inputOptions}"
|
|
|
|
# Only for educational purposes. Can be removed.
|
|
#-----------------------------------------------
|
|
echo "++ Test: Number of arguments: [$#]"
|
|
echo '++ Test: Looping through "$@"'
|
|
for a in "$@"; do
|
|
echo " ++ [$a]"
|
|
done
|
|
#-----------------------------------------------
|
|
|
|
while true; do
|
|
case "${1}" in
|
|
--aoption | -a) # Argument found.
|
|
echo "Option [$1]"
|
|
;;
|
|
|
|
--debug | -d) # Enable informational messages.
|
|
echo "Option [$1] Debugging enabled"
|
|
;;
|
|
|
|
--file | -f) # Check for optional argument.
|
|
case "$2" in #+ Double colon is optional argument.
|
|
"") # Not there.
|
|
echo "Option [$1] Use default"
|
|
shift
|
|
;;
|
|
|
|
*) # Got it
|
|
echo "Option [$1] Using input [$2]"
|
|
shift
|
|
;;
|
|
|
|
esac
|
|
DoSomething
|
|
;;
|
|
|
|
--log | -l) # Enable Logging.
|
|
echo "Option [$1] Logging enabled"
|
|
;;
|
|
|
|
--test | -t) # Enable testing.
|
|
echo "Option [$1] Testing enabled"
|
|
;;
|
|
|
|
--help | -h)
|
|
echo "Option [$1] Display help"
|
|
break
|
|
;;
|
|
|
|
--) # Done! $# is argument number for "--", $@ is "--"
|
|
echo "Option [$1] Dash Dash"
|
|
break
|
|
;;
|
|
|
|
*)
|
|
echo "Major internal error!"
|
|
exit 8
|
|
;;
|
|
|
|
esac
|
|
echo "Number of arguments: [$#]"
|
|
shift
|
|
done
|
|
|
|
shift
|
|
# Only for educational purposes. Can be removed.
|
|
#----------------------------------------------------------------------
|
|
echo "++ Test: Number of arguments after \"--\" is [$#] They are: [$@]"
|
|
echo '++ Test: Looping through "$@"'
|
|
for a in "$@"; do
|
|
echo " ++ [$a]"
|
|
done
|
|
#----------------------------------------------------------------------
|
|
|
|
}
|
|
|
|
################################### M A I N ########################
|
|
# If you remove "function UseGetOpt () {" and corresponding "}",
|
|
#+ you can uncomment the "exit 0" line below, and invoke this script
|
|
#+ with the various options from the command-line.
|
|
#-------------------------------------------------------------------
|
|
# exit 0
|
|
|
|
echo "Test 1"
|
|
UseGetOpt -f myfile one "two three" four
|
|
|
|
echo;echo "Test 2"
|
|
UseGetOpt -h
|
|
|
|
echo;echo "Test 3 - Short Options"
|
|
UseGetOpt -adltf myfile anotherfile
|
|
|
|
echo;echo "Test 4 - Long Options"
|
|
UseGetOpt --aoption --debug --log --test --file myfile anotherfile
|
|
|
|
exit
|