Skip to content

Instantly share code, notes, and snippets.

@countless-integers
Last active July 28, 2022 15:08
Show Gist options
  • Save countless-integers/90b144a38c31547c2fde60eebe477aa5 to your computer and use it in GitHub Desktop.
Save countless-integers/90b144a38c31547c2fde60eebe477aa5 to your computer and use it in GitHub Desktop.
Bash argument parser supporting long options and positional arguments alike
#!/bin/bash
# @source: https://medium.com/@Drew_Stokes/bash-argument-parsing-54f3b81a6a8f
PARAMS=""
while (( "$#" )); do
case "$1" in
-a|--my-boolean-flag)
MY_FLAG=0
shift
;;
-b|--my-flag-with-argument)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
MY_FLAG_ARG=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
-*|--*=) # unsupported flags
echo "Error: Unsupported flag $1" >&2
exit 1
;;
*) # preserve positional arguments
PARAMS="$PARAMS $1"
shift
;;
esac
done
# set positional arguments in their proper place
eval set -- "$PARAMS"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment