내 스크립트가 명령 매개변수를 허용하지 않는 이유는 무엇입니까?

내 스크립트가 명령 매개변수를 허용하지 않는 이유는 무엇입니까?

스크립트가 있습니다.

#!/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
}

현재는 사용자가 다음을 입력할 수 있도록 명령 매개변수를 추가하려고 합니다.

$ addition -rs 4 -re 10 

4에서 10까지 반복하여(그래서 추가 4 + 5 + 6 + 7 + 8 + 9 + 10) 합계를 출력합니다.

그러나 위의 작업을 수행하면 다음 출력이 반환됩니다.

0
0
전달된 매개변수가 유효하지 않습니다. 사용법은 -h 추가를 참조하세요.

그래서 내 매개변수를 인식하지 못합니다. 명령을 다음과 같이 변경할 때:

$ addition -rs4 -re10 

그것은 동일하게 출력됩니다. 스크립트에서 내가 뭘 잘못하고 있는 걸까요?

답변1

이것getopts내장단일 문자 옵션만 처리할 수 있습니다.

getopts 's:e:h'

h또한 여러분이 논쟁을 벌이고 싶지 않을 것이기 때문에 다음 콜론도 제거했습니다 -h.

관련 정보