2012-07-25 5 views
0

매개 변수에서 문자열을 추출해야하는 셸 스크립트에서 작업하고 있습니다. 내가매개 변수에서 문자열을 추출하는 쉘 스크립트

 test.sh arg1=someArgument Arg2=AnoTherArgument 
같은 매개 변수를 전달하고 경우

내가

 for arg in "[email protected]" 
     do 
      if [ lower("${arg}") == "arg1" ] then 
       # extract arg1's value and do something 
      elif [ lower("${arg}") == "arg2" ] then 
       # extract arg2's value and do something 
      fi 
     done 
처럼, 어떤 것을 매개 변수를 추출하고 조작 할 수 있고, 사용자가 어떤 경우에 이름과 값으로 인수를 전달할 수

가정

전달 된 것과 동일한 경우 매개 변수의 값을 추출하는 방법은 무엇입니까?

+1

그것은 내부에'=='사용하려면 유효한 POSIX가 아닌 환경을 통해 물건을 전달합니다 '[]'; 단일 등호 '='를 대신 사용하십시오. 또한 어떤 쉘과 버전을 타겟팅하고 있습니까? bash 4에는 tr과 같은 외부 도구를 사용하지 않고 변수를 대소 문자로 변환하는 매개 변수 확장 연산자가 내장되어 있습니다. –

+0

제목이 일관성이 없기 때문에 질문을 변경하면 안됩니다. 문제가 해결되면 대답을 수락하십시오. –

답변

0

glob 패턴을 일치시키기 위해 이중 대괄호를 사용하십시오. 세미콜론은 "다음"

if [[ "$arg" = a=* ]];then echo ${arg#a=};fi 

명확성에 대한 자세한 내용은

man bash 
/Parameter Expansion 
+0

게시물을 편집했습니다. 한번 봐주세요. 전달 된 인수 이름은 모든 유형이 될 수 있습니다. 그렇다면 tr [: upper :] [: lower :]를 사용하여 인수를 소문자로 변환 할 수 있지만 사용자가 전달한 것과 동일한 경우 인수의 값을 추출하는 방법은 무엇입니까? – Mojoy

2

에 대한

if [ "${arg%%=*}" = a ];then echo ${arg#a=};fi 

, 나는 다음과 같은 경우 문을 선호하기 전에 필요한 :

while [ $# -gt 0 ] 
do 
    case $1 in 
    a=*) echo ${1#a=};; 
    b=*) echo ${1#b=};; 
    # etc 
    esac 
    shift 
done 
+0

게시물을 편집했습니다. 한번 봐주세요. 전달 된 인수 이름은 모든 유형이 될 수 있습니다. 그렇다면 tr [: upper :] [: lower :]를 사용하여 인수를 소문자로 변환 할 수 있지만 사용자가 전달한 것과 같은 경우 인수의 값을 어떻게 추출 할 수 있습니까? 도와주세요. – Mojoy

+0

'[Aa] [Rr] [Gg] 1) echo $ {1 # [Aa] [Rg] [Gg] 1} ;; – tripleee

+0

동일하게 수행 : 각 인수의 첫 부분 만 tr [ upper :] [: lower :], 아마 이런 식이다. (인자 당 하나의 등호 만 가정하자.) case $ (echo $ {1 % = *} | tr [: upper :] [: lower :]) in; arg1) echo $ {1 # * =} ;; ; esac' (나쁜 디스플레이에 죄송합니다) – Bentoy13

0

논증을 분석하는 데 왜 힘드는가? ?

foo에서 :

#!/bin/sh 
echo Value of arg1: ${arg1-default value} 

다음 :

$ arg1=blah ./foo 
Value of arg1: blah 

$ ./foo 
Value of arg1: default value 
관련 문제