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
)