设为首页 收藏本站
查看: 1124|回复: 0

shell 脚本中while 循环只执行一次的问题

[复制链接]

尚未签到

发表于 2018-8-26 08:23:17 | 显示全部楼层 |阅读模式
  自己写的一个获取所有远程服务器数据库启动配置信息的bash 脚本,发现循环里的ssh远程命令只能执行一次,感觉很奇怪,以前没这么使用过,
  我的脚本为
#!/bin/bash  
## generate a separated line
  
for i in `seq 0 80`
  
    do
  
        vv+="#"
  
    done
  
#echo $vv;exit
  
##
  
cat myhost.txt|while read host
  
do
  
echo -e "$host\n"
  
ssh -q -n brucetam@$host "/sbin/chkconfig --list|grep -E \"mysql|mongo\""
  
#echo -e "###############\n"
  
        echo -e "$vv\n"
  
done
  网上查询资料如下为参考资料,转载过来当做笔记
  以前写过一个批量ssh的脚本,来批量处理一些东西,不过遇到过一个问题就是while循环只执行一次就退出。
  现在又有人问到,就顺便记录一下,测试脚本如下
  while read line ;
  do
  ssh  -p20002 $line  -o StrictHostKeyChecking=no xxxxxxxxx
  done < ip.txt
  其中ip.txt里是需要修改东东的ip列表,每次执行都只执行一次很”奇葩“。以前也不明白后来一个sys哥们他告诉我使用-n可以解决。
  不过他说不清为啥,后来自己 man ssh 发现 -n有如下解释:
  -n      Redirects stdin from /dev/null (actually, prevents reading from stdin).  This must be used when ssh is
  run in the background.
  具体意思是说, -n 使得ssh 使的标准输入重定向为/dev/null,否则的话ssh会读取标准输入(但是对ssh来说,读取标准输入的内容并没有什么用处)
  结合-n 参数解释刚刚说的while 执行一次的问题:
  while 第一次从标准输入读取ip.txt 一行开始执行循环 然后执行到ssh ,这个时候ssh 会读取标准输入的所有内容但没任何作用,执行完后依然执行while
  循环,这个时候while read line 想读取标准输入的内容,发现已经没有任何内容,故退出这就是我们看到的while只读取一次的原因。
  ps:上述分析纯属个人理解,如有误导,实属巧合。
  本文转自http://blog.csdn.net/lidan3959/article/details/20452717



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-556579-1-1.html 上篇帖子: shell 打印偶数行-奇数行 ,打印行号 下篇帖子: rsync错误捕获 shell捕获返回码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表