Confira este tutorial no GetOpt. Neste caso, parece que você tem negligenciado o seu opstring
tente algo como:
for flag in getopts "M:d:a"; do
case $flag in
...
, o que significa que você espera possíveis opções válidas de -d -M e -a. o: indica que o -d e um opções tem um parâmetro (: vai antes da opção em questão), então você poderia invocá-lo como
./somescript -M -d sometext -a somemoretext
também não use opções duplicadas. ele terá resultados imprevisíveis em sistemas e camadas diferentes.