zoukankan      html  css  js  c++  java
  • while read line无法循环read文件

    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

  • 相关阅读:
    为zabbix穿上一件漂亮的外衣
    CentOS7 Ceph分布式集群部署
    SSH 免秘钥登录
    zabbix监控Tomcat/JVM 实例性能
    zabbix 监控 IPMI
    2装饰者模式
    1代理模式
    3单例模式
    2抽象工厂模式
    1工厂模式
  • 原文地址:https://www.cnblogs.com/fjping0606/p/5725953.html
Copyright © 2011-2022 走看看