shell脚本中嵌套多个while语句后内部while循环变量的值不能传递到外部while循环问题处理

2018年11月29日 4669点热度 0人点赞

   想要实现下使用命令获取对应IP列表里每个服务器运行的进程(因为是测试,没有加上相应获取服务器进程列表的命令,只是用不同文本来做示范达到差不多同样效果),然后分别过滤服务器是否存在软件列表里面定义的进程,如果存在的话,就在IP后面空格分割显示出来!



一、测试所使用的文件




二、测试正常的脚本


执行结果:




三、说明

   最开始的时候上面第二节的脚本,使用的是第16行的配置,17行和18行没有。。然后发现脚本执行完后,只会打印三个IP,并没有软件名。但是测试在内部那个循环里面直接第16行管道符后面加上echo能看到内部那个while的变量已经赋值了的。

   后来百度上查了下相关资料,才知道当使用管道的时候,会打开一个新的subshell,后边给变量a重新赋值的代码在subshell中执行。但是因为赋值的过程只在刚才subshell这个子shell中才会生效,当前循环结束后,回到主shell,变量a没有并没有被修改,相当于在第11行赋值后,直接第22行打印出来了,所以才会只显示IP。

   所以后边,就把第16行给注释掉了,新增了17和18行达到同样过滤后赋值的目的,脚本即达到正常想要实现的效果。



Chen

健康 · 开心 · 做自己