-
Notifications
You must be signed in to change notification settings - Fork 1.9k
SC2220
koalaman edited this page Sep 16, 2017
·
1 revision
#!/bin/sh
while getopts "vr" f
do
case "$f" in
v) echo "verbose" ;;
r) echo "recursive" ;;
esac
done#!/bin/sh
while getopts "vr" f
do
case "$f" in
v) echo "verbose" ;;
r) echo "recursive" ;;
*) echo "usage: $0 [-v] [-r]" >&2
exit 1 ;;
esac
doneThe case statement handling getopts arguments does not have a default branch to handle unknown flags.
When a flag is not recognized, such as if passing -Z to the example code, getopts will set the variable to a literal question mark ?. This should be handled along with all the valid flags, usually by printing a usage message and exiting with failure.
Using a \?) or ?) case will also match invalid flags, but*) would additionally match things like the empty string if the variable name was misspelled.
If your script's logic handles unrecognized flags in another way, e.g. after the case statement, you can ignore this warning.