Como gerenciar atribuição de argumento getops

1

Esta é a minha primeira pergunta.

Estou tentando criar um script pequeno com opções e estou usando getopts para fazer isso. O estranho é:

O argumento não é atribuído à variável ou sempre entra no bloco de código if (isso parece ser o problema).

Aqui está o script:

#!/bin/bash

function work () {
    echo "It Works" }

function help () {
    echo "Print some help and options" }

while getopts ha:b: OPT; do
    case $OPT in
        -h)
            help
            exit
            ;;
        -a)
        OPTA=$OPTARG
        ;;
        -b)
        OPTB=$OPTARG
            ;;
        \?)
        help
            break
            ;;
    esac done

echo $OPTB

if  [[ -z $OPTB ]]; then
    echo "ERROR. Needs OPTB"
fi

if [[ -n $OPTB ]]; then
    echo "All OK untill here"
    work
fi

Imprime sempre a mensagem ERROR.

    
por NotFromBrooklyn 04.10.2012 / 13:21

1 resposta

1

getopts remove o sinal "-" das opções.

Então você precisa:

while getopts ha:b: OPT; do
    case $OPT in
        h)
            help
            exit
            ;;
        a)

 ....

E lembre-se de limpar suas variáveis antes de chamar getopts ( unset OPTA OPTB ) como elas podem estar no ambiente recebido pelo seu script. Considere também o caso de se chamar o script com -b "" é válido ou não, pois seu [[ -z $OPTB ]] não diferencia "no -b option" da opção " -b com argumento vazio".

    
por 04.10.2012 / 13:37