Você realmente só precisa verificar : e ? com getopts em bash se você usar relatórios de erros silenciosos (quando o primeiro caractere de optstring for dois pontos).
Quando getopts não for usado dessa forma, ele produzirá suas próprias mensagens de diagnóstico para opções inválidas e para argumentos de opção ausentes (e geralmente são bastante adequados). Na verdade, ele não colocará : ou ? na variável, a menos que seja silenciado.
Usar * em uma declaração de caso seria uma maneira de capturar ambos, mas se getopts for silenciado, você não saberia qual erro foi acionado e seria capaz de dizer algo nas linhas de an error occurred while parsing the command line options para o usuário.