有个需求:有三列信息文本,第一列IP,第二列用途,第三列备注,需要登录每个IP执行命令,不符合执行命令结果的,打印出文本中这一行信息。
需求很简单,只要用一个循环,能逐一登录到每台机器,执行命令就可以了,刚开始以为只要5分钟就能搞定的事情,结果花费了我一个上午的时间。主要耽搁在while循环里面嵌套了ssh。
首先说说for跟while读行的区别,如都只有一列,结果是一样的,但是如果多列,比如txt内容这样:
line1 line2 line2
line4 line5 line6
用for循环:
for line in `cat txt`;
do echo $line;
done
显示的结果:
line1
line2
lien3
line4
line5
line6
用while循环:
cat txt|while read line;
do echo $line;
done
显示的结果:
line1 line2 line2
line4 line5 line6
因此我的需求能用while来做,脚本如下:
cat txt|while read line
do
IP=`echo $line|awk '{print $1}'`
ssh -o ConnectTimeout=10 ${IP} "ls -l /home/admin|grep /"keyword/""
for与while循环读行及嵌套ssh的区别
最新推荐文章于 2024-05-18 23:38:31 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)
07-26
479
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-01
4361
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-29
1254
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)