2012-06-11 4 views
-3
i=0 
EDA="xx7p2" 
while read line 
do 
    echo "i is --- $i" 
    echo " PACKAGE IS - --$EDA--" 
    #echo $line "\n" 
    if (($i > 0)) 
    then 
     package=$(echo $line | awk '{print $1}') 
     echo "EDA PACKAGE IN LOOP IS ---$Eda_package---" 
     if [ "$package" == "$EDA" ] ; then 
      #then 
      well_bias=$(echo $line | awk '{print $2}') 
      biasmap=$(echo $line | awk '{print $3}') 
      unified=$(echo $line | awk '{print $4}') 
      echo "eda pack --$package bias is --$wel biasmap is --$biasmap unified-   --$unified" 
     fi 
    fi 
    i=$((i+1)) 
done < config.list 

두 변수가 같더라도 두 번째 if 문 내의 명령문은 실행되지 않습니다. 내가 여기서 뭔가를 놓치고 있니?bash에서 else의 오류가 발생했습니다.

+0

두 번째'then'이 주석 처리되는 특별한 이유는 무엇입니까? 편집 - 죄송합니다, 나는 코드를 잘못 읽었습니다 (들여 쓰기가 도움이 될 것입니다). – cdarke

+0

나는 if 행 자체에서 사용했다. 다른 구문을 시도했다. – monucool

+0

당신은 그들이 같은지 어떻게 알 수 있습니까? 당신은 어디에서나'$ package'를 인쇄하지 않습니까? –

답변

1

문제를 단순화하여 문제를 해결하십시오. 나는이 샘플 스크립트를 사용하여 문제를 재현 할 수

#!/bin/bash 
i=$1 
a=$2 
while read line 
do 
    if (($i > 0)) 
    then 
     echo "1st if "+$i 
     if [ "$a" == "foo" ] ; then 
      echo "2nd if" 
     fi 
    fi 
    i=$((i+1)) 
done < nfoo.sh 

라는 nfoo을.쉬 전화하고 ./nfoo.sh 4 bar, ./nfoo.sh -4 bar, ./nfoo.sh 4 foo and ./nfoo.sh -4 foo.

오류가 패키지 배정에있을 수 있습니까? 이런 간단한 작업을 위해 awk이 필요하지 않습니다. 한 단어의 경우 첫 번째 단어를 추출하기 위해 awk-statement에서 아무 것도 볼 수 없지만 echo ${line/ */}을 사용합니다.

더 많은 인수를 추출하기 때문에, 나는 배열 제안 :

#!/bin/bash 
i=$1 
a=$2 
while read line 
do 
    if (($i > 0)) 
    then 
     arr=($line) 
     echo "1st if "+$i 
     if [ "if" == "${arr[0]}" ] ; then 
      echo "2nd if: " $line 
     fi 
    fi 
    i=$((i+1)) 
done < nfoo.sh 

이 Btw는 경우 그렇지 않으면, 헤드 라인에 대해 이야기하고있다 .:을?

0

UPDATE : 아래의 작은 스크립트에 더 많은 테스트를 기반으로 :

package 변수에 문자열의 일부로서 $를 갖는 나를 위해 문제였다. 내가 \$으로 그것을 빠져 나왔다면 나는 아래에 언급 된 정확한 비교 연산자로 작동하게됩니다. 공간없이 비교

사용이합니다 (= 후/전 공간주의)

if [ "$package" = "$EDA" ] ; then 

표현은 참으로 항상 평가하는 것 같다. (또한 옆으로 ==을 공백없이 사용하면 [: 11: $EDAx: unexpected operator이됩니다.)

테스트 용으로이 작은 스크립트를 사용 했으므로 자신의 구성을 확인하는 데 사용할 수 있으므로 도움이 되셨을 것입니다. 이

#!/bin/bash 

package="\$EDA" 
echo $package 

if [ "$package" = "\$EDA" ] ; then 
    echo "The same" 
else 
    echo "Not the same" 
fi 

을 같이 제대로 작동 : 당신의 스크립트가 어떤 else

주 2를 포함하지 않기 때문에, 비교의 결과의 일부가되도록 else을 추가 : 그것은 항상 더 나은 일부 외부 암시 적 환경 설정에 의존하지 않고 실행할 쉘을 명시 적으로 지정하므로 스크립트에 #!/bin/bash을 추가하는 것이 좋습니다. 확실히 해를 끼치 지 않을 것입니다. Advanced Bash-Scripting Guide 방송에서

Other Comparison Operator :

문자열 비교

=

같으면 [ "$ a를"= "$ B를"]

= 공백 공백에 유의하십시오. [ "$ a"= "$ b"]이 (가) 위와 같지 않은 경우

[ "$ a를"== "$ B가"]

이 = 동의어이면

==는

같다.

+0

예. 매력처럼 작동했습니다 .. – monucool

+0

그냥 bash가 위의 문장을 해석하는 방법을 알고 싶습니다. – monucool

+0

왜 downvote? 나는 이것이 OP의 문제 (대답을 수용)를 해결하기 때문에 이해가 가지 않습니다. Downvote w/o 설명이 도움이됩니다. * 아무도 * (OP, SO 또는 나 ..) – Levon

관련 문제