Help message for shell scripts
Shell scripts are awesome. They are so useful to automate repetitive and boring work. The hardest thing about them, though, is documentation. How often have you written one, put it in the bin directory and forgotten all about it? How cool would it be to have a help message for them?
We could, of course, implement it with a bunch of echo calls. But there’s a neat trick. I originally learned this trick in a blog post by Egor Kovetskiy, but the post seems to be gone. As it was very useful to me, I’m putting it out there again.
Add your help message as comments at the top of your file, right after the shebang.
#!/bin/bash
###
### my-script — does one thing well
###
### Usage:
### my-script <input> <output>
###
### Options:
### <input> Input file to read.
### <output> Output file to write. Use '-' for stdout.
### -h Show this message.
Next, we need to get this message using sed.
sed -rn 's/^### ?//p' "$0"
What’s happening here:
$0is the filename of the file that is being executed;-rflag means using extended regular expressions;-nflag preventssedfrom echoing each line to the standard output;sstands for substitution of the following pattern;/defines the start and end of the pattern;^### ?matches a string starting with###followed by an optional space;//defines the substitution string, here an empty string;pprints the result of the substitution.
Now, we just need to call this if -h is passed or no arguments are given.
if [[ $# == 0 ]] || [[ "$1" == "-h" ]]; then
sed -rn 's/^### ?//p' "$0"
exit 0
fi
Hope it helps!