You've misunderstood how getopt works. the ':' is appended to the switch letter that takes an argument
while getopt a:v o
do case "$o" in
a) VAR=$OPTARG;;
b) VERBOSE=true;;
[?]) echo "Usage: $0 -a <something> [-v]"
exit 1;;
esac
done
here 'a' requires an arg and 'v' does not. This is represented by 'a:' and 'v'. So, if you want to add 'm' which requires a parameter you'd add 'm' followed by ':' . your getopt statement would be 'getopt a:m:v'