shell 脚本中while 循环只执行一次的问题
自己写的一个获取所有远程服务器数据库启动配置信息的bash 脚本,发现循环里的ssh远程命令只能执行一次,感觉很奇怪,以前没这么使用过,
我的脚本为
#!/bin/bash ## generate a separated line for i in `seq 0 80`dovv+="#"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
转载于:https://blog.51cto.com/brucetam/1643791
shell 脚本中while 循环只执行一次的问题相关推荐
- 【Linux】Shell脚本中的多任务并发执行
Shell脚本中的多任务并发执行 需求 实现一个脚本能够使用ping检测网络的连通性 可以同时检测多个IP地址, 并且将检测结果输出 分析 正常情况下,Shell脚本中的命令是串行执行的,当一条命令执 ...
- Shell脚本中的循环
循环语句: Bash Shell中主要提供了三种循环方式:for.while和until. 一.for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区 ...
- shell脚本中for循环及while循环写法
for循环 例1 **展示上面的数组 #!/bin/bash #脚本名称为222.sh name1="nihao1" name2="nihao2" name3= ...
- 在 Shell 脚本中跟踪调试命令的执行
文章目录 shell 脚本调试系列 概述 shell 跟踪执行的重要性 shell 脚本调试系列 本系列的前面部分清晰地阐明了另外两种 shell 脚本调试模式:详细模式和语法检查模式,并用易于理解的 ...
- Shell脚本中循环until命令用法笔记
在shell脚本中,可以使用until执行循环处理,如果使用until命令的话如果表达式的结果为false时才执行循环体,直到测试表达式的值为true的时候才会 停止循环. 语法结果如下: until ...
- shell脚本for循环_了解Shell脚本中的for循环
shell脚本for循环 Continuing on from our previous tutorials, let's understand the for loop in shell scrip ...
- shell脚本中判断上一条python命令执行情况
shell脚本中判断python命令执行结果 python脚本main.py import sys def main():try:"执行相关操作"sys.exit(0)except ...
- Shell脚本中获取命令运行结果、特殊变量使用、条件判断等常用操作
文章目录 前言 获取命令执行结果 使用反引号 `` ` ``command `` ` ``来执行命令 使用括号组合 $(command) 来执行命令 两种方式的区别 特殊变量使用 $0 $1 $2 . ...
- 如何在 Shell 脚本中执行语法检查调试模式
我们开启了 Shell 脚本调试系列文章,先是解释了不同的调试选项,下面介绍如何启用shell调试模式. 写完脚本后,建议在运行脚本之前先检查脚本中的语法,而不是查看它们的输出以确认它们是否正常工作. ...
最新文章
- Vue API(directives) 自定义指令
- oracle left join优化
- DBGrid 应用全书(一)
- C语言 (条件编译#ifdef、#ifndef) (#if 常量,#if 1,#if 0)的用法
- python怎么把所有标点符号置空_Python从小白到攻城狮(1)——python环境搭建
- python并行for循环_Python并行执行for循环
- PHP 织梦 帝国那个好,帝国、PHPCMS及织梦对比(十):推荐位功能
- 会计专业领域计算机应用系统,信息技术在会计专业领域中的应用
- Linux下安装Nginx完整教程及常见错误解决方案
- 外包如何安排人手-b
- 05Oracle P6培训系列:05创建项目
- 差分进化算法_差分进化算法入门及实例应用
- oracle 客户端安装包下载地址,Oracle客户端安装及下载地址
- 服务器远程关机软件,实现远程关机需要哪些步骤?向日葵怎么实现远程关机控制?...
- 计算机flash拉开效果,使用Flash制作卷轴展开效果
- 2db多少功率_db换算(db和功率的换算)
- win10触控平板 如何禁掉IE10的手势控制
- 让32位Eclipse和64位Eclipse同时在64的Windows7上运行
- 【生活】如何线上办理持有广州社保人员的异地分娩医保登记 - 定点医院 - 异地就医报销相关
- java模拟网易邮箱登录_java实现163邮箱发送邮件到qq邮箱成功案例
热门文章
- 【题解】Luogu P1011 车站
- 使用python+ffmpeg批量转换格式
- NYOJ题目611练练
- Gym 100507G	The Debut Album (滚动数组dp)
- 2.6.24及以上版本内核裁剪后启动黑屏的解决办法
- MFC笔记2(控件位置调整)
- win32汇编指令汇总
- window 之命令行的cd
- mysql5.7.12 my.ini文件_MySQL5.7缺少my.ini文件的解决方法
- python一到10整数的平方和_零基础学python_10_列表(创建数值列表 )