您的位置:首页 > 其它

while read line无法循环read文件

2016-08-01 15:16 246 查看
while read line 与for循环的区别

例子:
要从一个ip列表中获取ip、port,然后ssh ip 到目标机器进行特定的command操作
ssh -o StrictHostKeyChecking=no -p22 ip "ls -la /data/"
ip列表:
115.159.93 1 22
115.159.94.2 22
115.159.94.3 22
115.159.94.4 22

编写脚本时使用while read line逐行读取ip列表,然而出现了这个问题,在while循环中只读取第一个ip执行了command后就退出了脚本,而没有继续往下循环执行
这里就要解析一下while read line 与for循环的区别了
while read line 是一次性将信息读入并赋值给line ,而for是每次读取一个以空格为分割符的字符串。
while中使用重定向机制,ip列表中的所有信息都被读入并重定向给了整个while语句中的line变量。所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。
问题就出在这里,$line中的最后一行已经读完,无法获取下一行记录,从而退出while循环。

解决方法:
1、ssh加上-n参数
ssh -n -o StrictHostKeyChecking=no -p22 ip "ls -la /data/"
2、将ssh的输入重定向输入
ssh -o StrictHostKeyChecking=no -p22 ip "ls -la /data/" < /dev/null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: