A bash script that uses a loop to parse arguments handed over via the command line.

# Default values of arguments
SHOULD_INITIALIZE=0
CACHE_DIRECTORY="/etc/cache"
ROOT_DIRECTORY="/etc/projects"
OTHER_ARGUMENTS=()
 
# Loop through arguments and process them
while [ ${#@} != 0 ]; do
    case $1 in
        -i|--initialize)
        SHOULD_INITIALIZE=1
        shift # Remove --initialize from processing
        ;;
        -c=*|--cache=*)
        CACHE_DIRECTORY="${1#*=}"
        shift # Remove --cache= from processing
        ;;
        -c|--cache)
	      CACHE_DIRECTORY="$2"
        shift
        shift
        ;;
        -r|--root)
        ROOT_DIRECTORY="$2"
        shift # Remove argument name from processing
        shift # Remove argument value from processing
        ;;
        *)
	      echo "Invalid argument ${1}. Exiting..."
	      exit 1; 
        ;;
    esac
done
 
echo "# Should initialize: $SHOULD_INITIALIZE"
echo "# Cache directory: $CACHE_DIRECTORY"
echo "# Root directory: $ROOT_DIRECTORY"