with the exception of the
donecommand
done não é um comando.
Parece haver um mal-entendido: a palavra-chave done não significa que o script está pronto e pode terminar a execução. Em vez disso, é a contraparte da palavra-chave anterior do no while...do . Isso significa: quando a condição while é falsa, execute a próxima instrução após a palavra-chave done .
Talvez você queira adicionar um exit no final da lista de comandos executados se o usuário escolher Y .
Atualização:
Mencionei exit simplesmente porque ele já era usado na ramificação [Nn] , mas isso só teria corrigido o script. Usar break em vez de exit como sugerido por Gordon Davisson é uma ideia melhor que representa um melhoria , permitindo um maior desenvolvimento do roteiro.