Para que um shell script possa chamar uma função, essa função deve ter sido definida antes de chamá-la. Este não é o caso no seu código.
Para corrigir, mova a função para cima do loop de análise da linha de comando.
Além disso, eu faria com que o último case teste fosse *) para capturar qualquer opção não tratada ( /? nunca corresponderia a um único caractere de opção). E o utilitário getopts já enviaria uma mensagem de erro, assim você não precisa repetir isso ( $OPTARG também pode não ser o que você usa aqui, mas $opt ).