2013-02-25 10 views
0

여기 내 문제가 있습니다. 스크립트가 있고 스크립트를 호출 할 때 입력 한 매개 변수가 스크립트 내에서 변수 이름과 일치하는지 확인하려고합니다. 예를 들어Bash 스크립팅 : 매개 변수를 greping

:

./valid foo는 < - 스크립트 호출

#!/bin/bash 

PARAM=$1 
VAR=/foo/ 

if grep -c $PARAM == $VAR 
then 
echo yes 
fi 

echo no 

내가 GREP을 사용하여 최악의 시간을 보내고 있어요에게있는, 나는 내부 제대로 사용하는 방법을 잘 모르겠어요 스크립트 및 인터넷을 수색 한 후에 나는 내 문제에 대한 몇 가지 구체적인 피드백이 필요하다고 생각합니다.

감사합니다,

EA

+0

당신은 당신이 GREP 필요시겠습니까? 왜'[$ PARAM "=="$ VAR "]' – ryanbwork

+1

Eric을 정확히 일치 시키거나 정규 표현식과 일치시켜야할까요? –

답변

3

이 견고하지 않습니다,하지만 당신은 할 수 있습니다 :

if echo "$VAR" | grep -q "$PARAM"; then 

그것은 아마도 더 간단하게 할 수 있습니다 :

if test "$VAR" = "$PARAM"; then 

당신이 경우 정규 표현식과 일치시키려는 bash는 다음을 허용합니다.

if [[ "$VAR" =~ "$PARAM" ]]; then 

고정 문자열 $VAR과 정규식 $PARAM을 일치시킵니다. $VAR이 정규 표현식이면 인수의 순서를 반대로해야합니다. (즉, [[ "$PARAM" =~ "$VAR ]]입니다.)

+1

아마도 [[$ PARAM = ~ $ VAR]]'을 원할 것입니다. $ VAR이 패턴 인 것처럼 보입니다. –

+0

@EricAnderson, '$ [VAR]은 슬래시가없는''foo''여야합니다. –

+0

아마도'[[ "$ PARAM"= ~ $ VAR]]'- PARAM은 따옴표가 필요할 수도 있습니다. 그것은 정규식이되어야하는 경우 인용. – William

0

선언이 등호 다음에 이름이기 때문에 당신은, 스크립트 내에서 검색 할 수 있습니다 :

 
if egrep "^\s*$PARAM=" $0 
then 
    echo yes 
else 
    echo no 
fi 
0

변수가

set -o posix ; set 

는 POSIX를 사용 나열 물건은 기능의 목록을 막는다. 출력, 스크립트를 로컬 매개 변수를 분리 쉘에서 실행하고 결과를 저장, 을 다음 스크립트를 실행하고 비교하기 위해

(set -o posix ; set) >/tmp/variables.before 
(set -o posix ; set) >/tmp/variables.after