分析一段代码

时间:2014-01-07 15:18:10

标签: bash unix properties while-loop

我正在分析下面这段代码。而我无法理解这一行:

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

4 个答案:

答案 0 :(得分:2)

processinfo是由代码命名的变量。但是,这个循环的开始应该重写:

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

毫无疑问应该进行其他更改,但是UUOC并使用read来获取随后用echocut解析的整行,这是一个不容忽视的讽刺。

答案 1 :(得分:1)

该行从文件$serverlist读取输入并将每行存储在名为processinfo

的变量中

答案 2 :(得分:0)

processinfo是一个变量,用于存储$serverlist的所有行(包括空),这意味着只需在缓冲区中包含文件内容。它在迭代期间一次存储一行,并执行到您从文件中读取的最后一行。然后你在进一步的操作中使用相同的东西。无法在processinfo构造中修改此while

答案 3 :(得分:0)

这个结构:

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

表示“对于文件file中的每一行,执行<code>,其值$varname等于该行的内容”。

read是一个bash bulitin,它从标准输入读取一行并将其拆分为字段。在这种情况下,标准输入由命令cat提供,并且只有一个字段,因此整行被分配给processinfo