4つ以上のパーサー引数を選択します。

4つ以上のパーサー引数を選択します。

getopts以下のコードを使用してスクリプトの複数のパラメータを解析したいと思います。bash

while getopts b:B:m:M:T flag
do
    case "${flag}" in
        b) rbmin=${OPTARG};;
        B) rbmax=${OPTARG};;
        m) mbmin=${OPTARG};;
        M) mbmax=${OPTARG};;
        T) sigType=${OPTARG};;
    esac
done
echo $rbmin,$rbmax,$mbmin,$mbmax, $sigType
[amit@amitk]$ sh pass.sh -b 0.1 -B 0.3  -m 10 -M 11 -T sig 
0.1,0.3,10,11,

なぜ4つ以上のパラメータを渡すことができないのかわかりません。どんな提案がありますか?

ベストアンサー1

で指定されたオプション文字列にafterがありません:。これはオプションパラメータが必要であることを示します。Tgetopts:-T

それ以外の場合は、:引数-Tなしのオプションがあり、呼び出しはオプション引数ではなくオペランドsigでコマンドラインの末尾に残ります。

while getopts b:B:m:M:T: flag
do
    case $flag in
        b) rbmin=$OPTARG        ;;
        B) rbmax=$OPTARG        ;;
        m) mbmin=$OPTARG        ;;
        M) mbmax=$OPTARG        ;;
        T) sigType=$OPTARG      ;;
        *) echo error >&2
           exit 1
    esac
done
shift "$(( OPTIND - 1 ))"

echo "$rbmin,$rbmax,$mbmin,$mbmax, $sigType"

if [ "$#" -gt 0 ]; then
        printf 'Other operands: %s\n' "$*"
fi

テスト:

$ sh script -b 0.1 -B 0.3  -m 10 -M 11 -T sig
0.1,0.3,10,11, sig
$ sh script -b 0.1 -B 0.3  -m 10 -M 11 -T sig hello bumblebee
0.1,0.3,10,11, sig
Other operands: hello bumblebee

また、明示的なインタプリタ(たとえば)を使用してスクリプトを実行している場合は、shスクリプトを実行できない可能性がありますbashbashあなたの質問に「スクリプト」を言及したので、これについて言及します。この場合、スクリプトが機能しないため問題ありません。必要 bash#!ただし、上部に正しい行がある実行可能ファイルを使用する方が良いです。

おすすめ記事