Por que meu script não aceita argumentos de comando?

1

Eu tenho um script:

#!/bin/sh

function usage() {
    cat << EOF >&2
Usage: $0 [-h] [-rs <start_num>] [-re <end_num>]

-h:  help: displays list of options for command $0
-rs<int>: range start: should be the number to go from - the lower of the two ranges. <int>
-re<int>: range end: should be the number to add up to - the highest of the two ranges. <int>
EOF
    exit 1
}

function addition() {
    sum=0

    for number in "$@"; do
        sum=$(( sum + number))
    done

    # set defaults    
    rangeStart=0
    rangeEnd=0
    error=false

    # loop arguments
    OPTIND=1

    while getopts rs:re:h: o; do
        case $o in
            rs) rangeStart=$OPTARG;;
            re) rangeEnd=$OPTARG;;
            h) usage;;
            *) error=true;;
        esac
    done
    shift $((OPTIND - 1))

    echo $rangeStart
    echo $rangeEnd

    if [ "$error" = true ] ; then
        echo 'Invalid argument passed. See addition -h for usage.'
    else
        echo 'Total: '$sum
    fi
}

No momento, estou apenas tentando adicionar argumentos de comando para que o usuário possa digitar:

$ addition -rs 4 -re 10 

e faz um loop de 4 a 10 (adicionando 4 + 5 + 6 + 7 + 8 + 9 + 10 ) e produz o total.

mas fazendo o acima, retorna a saída de:

0
0
Invalid argument passed. See addition -h for usage.

por isso não está reconhecendo meus parâmetros. E quando eu alterar o comando para:

$ addition -rs4 -re10 

gera o mesmo .. o que estou fazendo errado no meu script?

    
por treyBake 04.09.2018 / 15:31

1 resposta

1

O getopts builtin só pode manipular opções de caractere único; você tem que usar algo como

getopts 's:e:h'

Eu também coloquei os dois-pontos depois de h , já que você provavelmente não quer um argumento para -h .

    
por 04.09.2018 / 15:47