2013-04-30 2 views
0

저는 명령문 인수를 허용하는 Bash Script를 작성하고 있지만, 한 번에 하나씩이 아니라 모두 한 번에 하나씩 case 문을 사용합니다. 다중 인수를 사용하는 bash 스크립트

다음은 지금까지

while [ $# -gt 0 ] 
do 
    case "$1" in 
     -n|--name) 
      name="$2" 
     ;; 
     -s|--size) 
      size="$2" 
     ;; 
     -l|--location) 
      location="$2" 
     ;; 
    esac 
done 

이 코드는 한 번에 하나를 받아, 나는 그들이 원하는만큼을 지정 할 수 있어야 내 코드입니다.

+3

'교대'설명서를보십시오. 또한 이것을 수행하는 올바른 방법 인'getopts'를보십시오. –

답변

4

은 다음과 같이 당신이 당신의 작업을 해결할 수 getopt를 사용하는 경우 :

OPTS=`getopt -o n:s:l: --long name:,size:,location: -- "[email protected]"` 
eval set -- "$OPTS" 

이 인용 될 수 둘 다 옵션으로 원래의 위치 매개 변수 (콜론으로 표기된 걸릴 인수)와 나머지 인수를 분할합니다. 그 다음에 getopt의 결과가 평가되고 set -- $OPTS은 위치 인수 $1, $2, $3, ...을 getopt에서 얻은 값을 설정합니다. 그 다음에는 위치 인수를 반복 할 수 있습니다 (스크립트에 대한 나머지 인수와 옵션을 구분하는 --이 발생하는 즉시 중지하십시오).

while true 
do 
    case "$1" in 
    -n|--name) 
     name="$2" 
     shift 2 
     ;; 
    -s|--size) 
     size="$2" 
     shift 2 
     ;; 
    -l|--location) 
     location="$2" 
     shift 2 
     ;; 
    --) 
     shift 
     break 
     ;; 
    *) 
     echo "Internal error!" 
     exit 1 
    esac 
done 

echo -e "name: $name\nsize: $size\nlocation: $location" 
관련 문제