Parsing CLI Flags in Bash
Published on
Updated on
Warning: This post has not been modified
for over 2 years. For technical posts,
make sure that it is still relevant.
I was creating a bash script and was looking around for a solution for parsing command line arguments. This StackOverflow post has a variety of different solutions available. I want to describe my favorite of these posts.
Inanc Gumus proposed the following:
#!/bin/bash
while [[ "$#" -gt 0 ]]; do case $1 in
-d|--deploy) deploy="$2"; shift;;
-u|--uglify) uglify=1;;
*) echo "Unknown parameter passed: $1"; exit 1;;
esac; shift; done
echo "Should deploy? $deploy"
echo "Should uglify? $uglify"
Let me quickly describe what it does. While the number of arguments left to process is greater than zero….
- Check to see if the argument matches any of the flags
- If it does…
- If the flag requires an additional argument grab it. Then discard an argument.
- If it doesn’t. Error out.
- Then get rid of an argument.
- If it does…
At the end of the while loop, you would’ve evaluated all the arguments!