因为最后有输入重定向符号

需要注意的是,config.ini文件中的标题行也会被读入。

man read,说明中可以看到,如果读成功的话,read返回读取的字节数;读到文件的末尾则返回0。而对于while来讲,条件为0表示为false,则退出循环。

有个需求:有三列信息文本,第一列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/""

if [ ! $? == "0" ];then

echo "$line"

fi

done

但是问题来了,执行后,只做了一行就结束了,刚开始还怀疑难道是if判断有问题,一个if结束就退出来了,于是在脚本的每一步都加了调试信息,结果很快发 现并不是if结束就退出来了。于是就逐个注释掉调试,发现把ssh这句注释了就能继续下去,难道ssh哪里写错了?原因不是这样的。后来在网上查了资料, 发现这么一句话:while中使用重定向机制。也就是说一开始做while循环,txt全部内容已经被重定向给while循环,而ssh语句正好会读取输入中的所有东西。于是自己调试一下:

cat txt|while read line

do

IP=`echo $line|awk '{print $1}'`

ssh ${IP} "cat"

done

显示结果:

line4  line5  line6

也就是是说,最后一行已经读完了,循环也就结束了。

解决办法:将ssh的输入重定向输入。

cat txt|while read line

do

IP=`echo $line|awk '{print $1}'`

ssh -o ConnectTimeout=10 ${IP} "ls -l /home/admin|grep /"keyword/""

if [ ! $? == "0" ];then

echo "$line"

fi

done

ssh最后加上

while read line

do

ehco "hello"

done < file

config done shell_shell do...done $config相关推荐

  1. SpringCloud创建Config Client通过Eureka访问Config

    1.说明 本文详细介绍配置中心客户端使用方法, 即Config Client到Config Server读取配置. 读取配置的方式有两种, 第一种是直接配置Configer Server的URL, 第 ...

  2. com.typesafe.config.ConfigException$BugOrBroken: com.typesafe.config.impl.SerializedConfigValue shou

    通过spark将图片数据写到sftp时,报错如下: com.typesafe.config.ConfigException$BugOrBroken: com.typesafe.config.impl. ...

  3. 目录config.php怎么修改域名,config.php · wlphp/基于宝塔面板api给站点新增删除域名接口 - Gitee.com...

    // +---------------------------------------------------------------------- // | 宝塔接口配置文件 // +------- ...

  4. dede config.chche.inc.php,dede/config.php · 辉辉菜/三强源码 - Gitee.com

    /** * 管理目录配置文件 * * @version $Id: config.php 1 14:31 2010年7月12日Z tianya $ * @package DedeCMS.Administ ...

  5. magento: configurable 显示所有属性及获取 Json Config how to get Json Config by product id

    1. 显示所有属性 $config_product = Mage::getModel('catalog/product')->load($_product->getId()); $prod ...

  6. python中config命令_python的logging.config使用详解

    python的log模块是日常使用最多的模块之一,  简单的使用这里就不多说了,见(http://blog.csdn.net/jianhong1990/article/details/17475717 ...

  7. 服务器上Web.config文件不能保存,Web.Config – 由于权限不足,无法读取configuration文件...

    我收到错误: Module IIS Web Core Notification Unknown Handler Not yet determined Error Code 0x80070005 Con ...

  8. vue config.js详解——vue config.js到底是什么,有什么作用?

    我们在做vue项目的时候,在根目录中肯定都看到过一个config.js文件,那么这个文件在整个项目中到底有什么作用呢? vue.config.js 是一个可选的配置文件,如果项目的 (和 packag ...

  9. creo 计算机配置,config配置文件乱码,creo配置文件config

    近期在windows 操作系统中有用户反应遇到了加载配置文件时出错 对路径C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.co ...

最新文章

  1. 给交叉编译工具建立软连接用脚本
  2. mongodb单机部署
  3. 对象并不一定都是在堆上分配内存的
  4. 一个SAP顾问的回忆:我过去很胖!
  5. TinkPHP框架学习-01基本知识
  6. vmware下找不到hgfs
  7. Linux下git使用
  8. java加锁多线程改为单线程_GUI为什么不设计为多线程(用户事件和底层事件的流程是相反的,每层都加锁效率太低,共用一把锁那就是单线程)...
  9. python实现MD5加密
  10. 多家公司布局大数据基金 策略模型待检验
  11. Delphi 11.0 Alexandria 来了
  12. 计算机网络实验-----常用网络命令操作
  13. Java 字符串转码工具类
  14. 计算机组装物料清单,什么叫物料清单
  15. 2023最新物联网毕业设计选题推荐100例
  16. VMware ubuntu虚拟机的安装过程记录
  17. 使用grep -c参数出现的种种谜团
  18. Springboot毕设项目二手交易平台n30e8(java+VUE+Mybatis+Maven+Mysql)
  19. 不同系统下的shell的不同_新风系统过滤网的不同分类
  20. ie浏览器自动拦截html,IE浏览器怎么设置拦截和屏蔽网站广告

热门文章

  1. 【Vegas原创】GridView修改表头,并导出Excel(C#版)
  2. jsp判断字符串相等_最长回文字符串三种解法
  3. apache +php + mysql_apache+php+mysql
  4. 解决magento保存产品时耗时很长的问题
  5. CCF201809(Java)
  6. bzoj 1031 [JSOI2007]字符加密Cipher 后缀数组
  7. # EXP8 Web基础
  8. myeclipse怎么集成Tomcat
  9. HDU 5919 Sequence II 主席树
  10. (FFOS Gaia) Telemetry - AUM分析