我正在分析下面这段代码。而我无法理解这一行:
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 :(得分:2)
processinfo
是由代码命名的变量。但是,这个循环的开始应该重写:
while IFS=, read processName processLog foo; do
processNameCount=...
...
done < $serverlist
毫无疑问应该进行其他更改,但是UUOC并使用read来获取随后用echo
和cut
解析的整行,这是一个不容忽视的讽刺。
答案 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
。