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
#!
, 그러나 상단에 올바른 줄이 있는 실행 파일을 사용하는 것이 더 좋습니다 .