今天在写代码中遇到一个问题如下:
数据文件a.data的内容如下: 111 aaa bad 172.16.101.10
222 dsd klsd 172.16.101.11 .........
现在程序如下:
cat a.data | while read id str1 str2 ip
do
rsh ${ip} ps -ef | grep nmc | grep -v grep
.....
done
但结果只执行了一次,即只执行了IP为172.16.101.10,后来到网上查资料,的确用while时执行rsh会对循环有影响,后改进如下:
for param in $(cat a.data|nawk '{print $4}')
do
rsh ${ip} ps -ef | grep nmc | grep -v grep
.....
done
经过改进,程序是可以进行多次循环,while中出现的问题也没有了,但是如果我在循环体中要用到其它的字段值却取不到,因为for中只能取一个变量,nawk中只取了$4.后来在网上查到一个好方法如下:
exec 3<a.data
while read id str1 str2 ip<&3
do
rsh ${ip} ps -ef | grep nmc | grep -v grep
.....
done
这样就可以把所有的字段读出来,而且在while的程序体内可以用rsh来执行.
数据文件a.data的内容如下: 111 aaa bad 172.16.101.10
222 dsd klsd 172.16.101.11 .........
现在程序如下:
cat a.data | while read id str1 str2 ip
do
rsh ${ip} ps -ef | grep nmc | grep -v grep
.....
done
但结果只执行了一次,即只执行了IP为172.16.101.10,后来到网上查资料,的确用while时执行rsh会对循环有影响,后改进如下:
for param in $(cat a.data|nawk '{print $4}')
do
rsh ${ip} ps -ef | grep nmc | grep -v grep
.....
done
经过改进,程序是可以进行多次循环,while中出现的问题也没有了,但是如果我在循环体中要用到其它的字段值却取不到,因为for中只能取一个变量,nawk中只取了$4.后来在网上查到一个好方法如下:
exec 3<a.data
while read id str1 str2 ip<&3
do
rsh ${ip} ps -ef | grep nmc | grep -v grep
.....
done
这样就可以把所有的字段读出来,而且在while的程序体内可以用rsh来执行.