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