Add 'examples/shell/shortcuts/getargs.sh'
This commit is contained in:
parent
c659380c6f
commit
d9bd2aeda8
56
examples/shell/shortcuts/getargs.sh
Normal file
56
examples/shell/shortcuts/getargs.sh
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# POSIX
|
||||||
|
|
||||||
|
# Reset all variables that might be set
|
||||||
|
file=
|
||||||
|
verbose=0 # Variables to be evaluated as shell arithmetic should be initialized to a default or validated beforehand.
|
||||||
|
|
||||||
|
while :; do
|
||||||
|
case $1 in
|
||||||
|
-h|-\?|--help) # Call a "show_help" function to display a synopsis, then exit.
|
||||||
|
show_help
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
-f|--file) # Takes an option argument, ensuring it has been specified.
|
||||||
|
if [ -n "$2" ]; then
|
||||||
|
file=$2
|
||||||
|
shift
|
||||||
|
else
|
||||||
|
printf 'ERROR: "--file" requires a non-empty option argument.\n' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
--file=?*)
|
||||||
|
file=${1#*=} # Delete everything up to "=" and assign the remainder.
|
||||||
|
;;
|
||||||
|
--file=) # Handle the case of an empty --file=
|
||||||
|
printf 'ERROR: "--file" requires a non-empty option argument.\n' >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
-v|--verbose)
|
||||||
|
verbose=$((verbose + 1)) # Each -v argument adds 1 to verbosity.
|
||||||
|
;;
|
||||||
|
--) # End of all options.
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-?*)
|
||||||
|
printf 'WARN: Unknown option (ignored): %s\n' "$1" >&2
|
||||||
|
;;
|
||||||
|
*) # Default case: If no more options then break out of the loop.
|
||||||
|
break
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
# if --file was provided, open it for writing, else duplicate stdout
|
||||||
|
if [ -n "$file" ]; then
|
||||||
|
exec 3> "$file"
|
||||||
|
else
|
||||||
|
exec 3>&1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Rest of the program here.
|
||||||
|
# If there are input files (for example) that follow the options, they
|
||||||
|
# will remain in the "$@" positional parameters.
|
Loading…
Reference in New Issue
Block a user