2014-08-31 2 views
-2

I가 bash에 다음 코드 : 어떤 이유배쉬`예기치 않은 토큰에 가까운/구문 오류} '

check_port() 
{ 
    local host=${1} 
    local port=${2} 
    echo $host 
    echo $port 
    while true; do 
     if nc -w 5 -z 127.0.0.1 111 && nc -w 5 -z 127.0.0.1 5001 ; 
     then 
      echo -e "\a\n => Port at host is open" 
      break 
     else 
      echo -e "\a\n => Port at host is closed" 
      break 
     fi 
} 

, 나는 다음과 같은 오류 얻을 :

syntax error near unexpected token `}' 
`}' 

이해가 안가 이유 : }이 함수의 범위를 닫습니다.

+0

는 스크립트 잘못이 무엇인지를 가르쳐 것입니다. – user2719058

답변

5

while 회선을 fi 줄과 닫는 중괄호 } 사이에서 종료하려면 회선이 done이어야합니다. 당신이 상관없이 if이 true 또는 false로 평가 여부와 그것의 휴식 이후 당신도 while true 루프를 왜

그러나, 나는 완전히 확실하지 않다. 따라서 어느 시점에서 이러한 블록 중 하나의 동작을 변경하지 않는다면 불필요합니다.

check_port() 
{ 
    local host=${1} 
    local port=${2} 
    echo $host 
    echo $port 
    if nc -w 5 -z 127.0.0.1 111 && nc -w 5 -z 127.0.0.1 5001 ; then 
     echo -e "\a\n => Port at host is open" 
    else 
     echo -e "\a\n => Port at host is closed" 
    fi 
} 

나는 또한 호스트에 전달하는 정신 완전히 확실하지 않다과 : 당신이 하지, 당신은 훨씬 더 간단와 더 나을 것을 계획하는 경우에

(두 개의 하드 코드 된 포트가있는 localhost을 사용하는 대신).

그러나, 나는 당신이 개발/테스트 단계보다는 while 루프의 끝에있는 가능성이 갔어요 미친 :-)

+0

미안하지만, 아직 개발 단계에 있습니다. 조건이 true를 반환하는 경우에만 중단을 사용합니다. 또한 로컬 호스트와 포트를 제거합니다. 감사. –

1

done에 아직도 것이없는 가정거야 은`while` 루프의 구문을 찾고

 .... 
     break 
    fi 
done; 

}