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がありません:
。これはオプションパラメータが必要であることを示します。T
getopts
:
-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
スクリプトを実行できない可能性がありますbash
。bash
あなたの質問に「スクリプト」を言及したので、これについて言及します。この場合、スクリプトが機能しないため問題ありません。必要 bash
#!
ただし、上部に正しい行がある実行可能ファイルを使用する方が良いです。