前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >while read line 与for循环的区别

while read line 与for循环的区别

作者头像
用户1278550
发布2019-05-23 18:16:51
1.4K0
发布2019-05-23 18:16:51
举报
文章被收录于专栏:idbaidba

一 背景

工作过程中遇到要从一个ip列表中获取ip port,然后ssh ip 到目标机器进行特定的操作,但是编写脚本的过程 使用while read line 读取ip列表,在while循环中只读取第一个ip 后就退出脚本的情况。

二 介绍

解释上面遇到的问题之前,先看到for 与while的测试对比,文中ip经过修改。

代码语言:javascript
复制
#/bin/bashIPS="10.1.1.10 300110.1.1.10 300310.1.1.11 300110.1.1.11 300210.1.1.11 300410.1.1.11 300510.1.1.13 300210.1.1.13 300310.1.1.13 300410.1.1.14 3002"echo "====while test ===="i=0
echo $IPS | while read linedo    echo $(($i+1))    echo $linedone

echo "====for test ===="n=0for ip in $IPS ;do   n=$(($n+1))   echo $ip   echo $ndone

输出结果如下:

代码语言:javascript
复制
====while test ====110.1.1.10 3001 10.1.1.10 3003 10.1.1.11 3001 10.1.1.11 3002 10.1.1.11 3004 10.1.1.11 3005 10.1.1.13 3002 10.1.1.13 3003 10.1.1.13 3004 10.1.1.14 3002====for test ====10.1.1.1013001210.1.1.1033003410.1.1.1153001610.1.1.11....

由例子可见 while read line 是一次性将信息读入并赋值给line ,而for是每次读取一个以空格为分割符的字符串。

三 原因

while中使用重定向机制,IPS中的所有信息都被读入并重定向给了整个while 语句中的line 变量。所以当我们在while循环中再一次调用read语句,就会读取到下一条记录。问题就出在这里,$line中的最后一行已经读完,无法获取下一行记录,从而退出 while循环。

解决方法

1 使用ssh -n "command" 2 ssh "cmd" < /dev/null 将ssh 的输入重定向输入。


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 背景
  • 二 介绍
  • 三 原因
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档