linux循环脚本while循环,shell脚本中while循环只执⾏⼀次的问
之前写过⼀个批量ssh的脚本,来批量处理⼀些东西,不过遇到过⼀个问题就是while循环只执⾏⼀次就退出。ssh
如今⼜有⼈问到,就顺便记录⼀下,测试脚本以下测试
while read line ;ip
do event
ssh  -p20002 $line  -o StrictHostKeyChecking=no xxxxxxxxxsed
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.di
linux循环执行命令脚本具体意思是说, -n 使得ssh 使的标准输⼊重定向为/dev/null,不然的话ssh会读取标准输⼊(可是对ssh来讲,读取标准输⼊的内容并⽆什么⽤处)
while
结合-n 参数解释刚刚说的while 执⾏⼀次的问题:
while 第⼀次从标准输⼊读取ip.txt ⼀⾏开始执⾏循环 ⽽后执⾏到ssh ,这个时候ssh 会读取标准输⼊的全部内容但没任何做⽤,执⾏完后依然执⾏while
循环,这个时候while read line 想读取标准输⼊的内容,发现已经没有任何内容,故退出这就是咱们看到的while只读取⼀次的缘由。
ps:上述分析纯属我的理解,若有误导,实属巧合。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。