Quando você executar este script sem nenhuma opção, o getopt retornará false, para que ele não entre no loop. Ele só vai descer para a impressão - é este ksh / zsh?
Se você tiver uma opção, é melhor testar $ name após o loop.
if [ -z "$name" ]
then
usage
exit
fi
Mas certifique-se de que $name estava vazio antes de chamar getopts (como poderia ter havido um $name no ambiente que o shell recebeu na inicialização) com
unset name
(antes do loop getopts )