2013-07-22 2 views
1

grep을 사용하여 for 루프를 작성하려고합니다. grep이 값을 반환하면 "running"이라는 메시지를 표시하려고합니다. 값이 리턴되지 않으면 "available"을 표시하십시오.for 루프에서 grep 사용

내 if 문에 문제가 있다고 생각하지만 아무것도 찾을 수 없습니다.

의견을 보내 주시면 대단히 감사하겠습니다.

#!/bin/sh 
    #JWR1.0, REL1.10 

    echo "Content-type: text/html" 
    echo "" 

    chk_port = 'ps -ef | grep "port $i -"' 

    for ((i=1; i<=5; i++)) 
    do 
      if [[ $chk_port ]]; then 
        echo "Running - $i<br>" 
      else 
        echo "Available - $i<br>" 
      fi 
    done 

    echo "<br>" 

    # For debugging 


    ps -ef | grep "port 1 -" 

샘플 출력 :

Available - 1 
    Available - 2 
    Available - 3 
    Available - 4 
    Available - 5 

    apache 7706 7700 0 15:07 ? 00:00:00 grep port 1 - 
+0

$ chk_port를 다음과 같이 바꾸어보십시오. $ (ps -ef | grep "port $ i -") –

+0

감사합니다. – Jeremy

+0

@ed .: 프로세스가 원래 실행 중인지를 확인하기 위해 5 번만 검사하기 때문에 이것은 for 루프를 무의미하게 만든다. . . – ruakh

답변

1

내가 당신의 문제가 더 당신의 PS의 출력port $i하지만 스크립트가 존재 생각하지 가있다 같아요.

문제는 명령 grep port $i -ps -ef의 출력에 있습니다. 디버깅 결과에 분명합니다. 당신은 예를 들어

chk_port=$(ps -ef | grep "[p]ort $i -") 

을, 트릭이있다, 그것을 방지하기 위해 ps -ef|grep foo

그것을 테스트 할 수

kent$ ps -ef|grep nothing 
kent  10226 4752 0 00:36 pts/2 00:00:00 grep --color=auto nothing 

kent$ ps -ef|grep [n]othing 
zsh: no matches found: [n]othing 

는 또한 grep와의 리턴 코드 (GREP를 확인할 수 있습니다 - q) 패턴을 찾았는지 결정하십시오. 일치하는 항목이 없으면 grep은 1을 반환하고 그렇지 않으면 0을 반환합니다.