スクリプトがコマンドパラメータを受け入れないのはなぜですか?

スクリプトがコマンドパラメータを受け入れないのはなぜですか?

スクリプトがあります。

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

おすすめ記事