2011-10-07 3 views
1

스크립트 사용 예제BASH에서 GETOPTS를 사용하여 명령 뒤에 인수를 얻는 방법

./myscript --p 1984 --n someName

#!/bin/bash 

while getopts :npr opt 
do 
    case $opt in 
    n) echo name= ???    ;; 
    p) echo port= ???    ;; 
    r) echo robot= "Something"  ;; 
    ?) echo "Useage: -p [#]"  ;; 
    esac 
done 

명령 옵션 다음 인수에 액세스하는 방법은 무엇입니까?

또한, 만약 내가 ./myscript --p 1985을 입력하면, 1985의 echo가 어떻게 돌아가는지를 알고 싶습니다.

+1

, 당신이 실제로으로 명령을 호출 '로 myscripf -p 1984 -n someName' –

답변

3

배쉬에서, 참조 help getopts ". 옵션 인수, getopts가의 쉘 변수 OPTARG에 인수 장소를 필요로 할 때"


usage() { echo "Usage: $(basename $0) -n name -p port -r"; exit; } 

while getopts :n:p:r opt # don't forget the colons for opts that take an arg 
do 
    case $opt in 
    n) name="$OPTARG" ;; 
    p) port="$OPTARG" ;; 
    r) robot=chicken ;; 
    ?) usage ;; 
    esac 
done 
shift $((OPTIND - 1)) 

echo "the name is $name" 
echo "the port is $port" 

난 당신이 떠들썩한 파티에서 옵션을 구문 분석 할 수있는 솔루션을 주변에 구글 수 있습니다 확신 해요. 다음은 몇 분 노력의 :

#!/bin/bash 

usage() { echo foo; exit; } 

while [[ $1 == -* ]]; do 
    case "$1" in 
    --) shift 1; break ;; 
    -p|--p|--port) port="$2"; shift 2;; 
    -n|--n|--name) name="$2"; shift 2;; 
    *) echo "unknown option: $1"; usage;; 
    esac 
done 

echo "the name is $name" 
echo "the port is $port" 
echo "the rest of the args are:"; (IFS=,; echo "$*") 

그리고 테스트,

물론
$ bash longopts.sh --port 1234 --bar a b c 
unknown option: --bar 
foo 
$ bash longopts.sh --port 1234 a b c 
the name is 
the port is 1234 
the rest of the args are: 
a,b,c 
+0

그래 내가 정확히 여전히이 복사 기울이지 마십시오. – stackoverflow

+0

교대 근무 $ ((OPTIND - 1))은 무엇을합니까? – stackoverflow

+1

이렇게하면 위치 매개 변수에서 방금 처리 한 옵션을 제거 할 수 있으므로 명령 줄에서 추가 인수에 액세스 할 수 있습니다. –

관련 문제