Tentando obter getopts para chamar uma função [duplicada]

1

Estou tentando fazer com que ele chame uma função.

Aqui está o meu código

#!/bin/bash
while getopts ":a:b:" opt; do
    case $opt in 
        a)
            my_function "%e"
            ;;
        b)
            my_function "%s"
            ;;
       /?)
            echo "Invalid option: -$OPTARG"
            ;;
    esac
done

my_function() {
    option=$1
    //do something here
}

Quando eu ligo: ./myscript.sh -a sshd

Isso exibiria ./myscript.sh: line 5: my_function: command not found

O que devo fazer para corrigir isso?

    
por defaultjay 10.10.2018 / 09:16

1 resposta

1

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 ).

    
por 10.10.2018 / 09:28