*)case, even if it just exits with error.
case "$1" in ) start_service ;; startstop) stop_service ;; restart|reload|force-reload) stop_service; start_service;; esac
case "$1" in ) start_service ;; startstop) stop_service ;; restart|reload|force-reload) stop_service; start_service;; *) echo >&2 "Invalid choice: $1" exit 1 esac
ShellCheck found a
case statement that may not be considering all possible cases. This may mean that only the happy paths are accounted for.
Consider adding a default case to handle other values. If you don't know what to do or don't believe it'll ever happen, exiting with an error is good, fail-fast practice.
The example is adapted from a real world Debian init script, which due to a missing default case reports success on any misspelled command (here with underscore instead of dash):
$ /etc/init.d/screen-cleanup force_reload && echo success success
This suggestion only triggers in verbose mode (
If you don't have a default case because the default should be to take no action, consider adding a comment to other humans:
case "$(uname)" in CYGWIN*) cygwin=1;; MINGW*) mingw=1;; *) ;; # No special workarounds identified esac
If you believe that it's impossible for the expression to have any other value, it's considered good practice to add the equivalent of an
assert(0) to fail fast if this assumption should turn out to be incorrect in the current or future versions:
case "$result" in true) proceed;; false) cancel;; *) echo >&2 "Submit bug report: '$result' should be true or false." exit 127 esac
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.