2014-01-07 6 views
0

다음 코드를 분석하고있었습니다. 그리고 그 줄을 이해할 수 없었습니다.코드 조각을 분석하십시오.

while read processinfo 

무엇이 processinfo입니까? 내가 processinfo 대신에 어떤 이름을 사용할 수 있습니까? 아니면 어딘가에 정의 된 processinfo입니까? mailaddress를 읽는 동안 "mailaddress"를 사용하는 것과 같습니다. 도와주세요.

#!/bin/bash 

serverlist=/home/path/serverlist.txt 
emaillistfile=/home/path/emaillist 

    cat $serverlist | while read processinfo 
     do 

      processNameCount=`ps -ef | grep "$processinfo" | grep -v grep | head -1 | awk '{print $2}'|wc -l` 

      if [[ $processNameCount -eq "0" ]] 
      then 
       cat $maillistfile | while read mailaddress 
       do 
        mailx -s "$processName not running - `date`" $mailaddress 
       done 
      fi 
    done 
+0

'processinfo'는'$ serverlist'의 줄을 포함 할 때마다 사용하는 변수입니다. – fedorqui

답변

0

processinfoprocessinfo라는 변수에 파일 $serverlist 저장 각 행의 입력을 판독하여 모든 행을 저장하는 변수이다 $serverlist 이는 단순히 파일을 갖는 수단 (비어 포함) 귀하의 버퍼에 콘텐츠. 반복 중에 한 번에 한 행을 저장하고 파일에서 읽은 마지막 행까지 실행합니다. 그런 다음 더 이상 조작 할 때 같은 것을 사용합니다. 이 processinfowhile 구조에서 수정할 수 없습니다.

0

이 구문 :

cat file | while read varname; do <code>; done 

수단 "file 파일의 각 라인은, 라인의 내용과 동일 $varname 값으로 <code> 실행".

read은 표준 입력에서 한 줄을 읽고 필드로 분할하는 bash bulitin입니다. 이 경우 표준 입력은 cat 명령에 의해 제공되며 하나의 필드 만 있으므로 전체 행은 processinfo에 지정됩니다.

2

processinfo은 코드에서 이름을 지정하는 변수입니다. 그러나,이 루프의 시작은 정말 다시 작성해야합니다

while IFS=, read processName processLog foo; do 
    processNameCount=... 
    ... 
    done < $serverlist 

이되어야한다 의심 할 여지없이 다른 변화가 있지만 UUOC 및 이후 echocut와 구문 분석 whichi 전체 라인을 얻기 위해 읽을 사용 말문이 막히지 않아야하는 희곡이다.

+0

또한 'processNameCount' 할당은 어색하고 비효율적입니다. 실제로하는 일은 단지'pidof "$ processName"| wc -w' – tripleee

관련 문제