您的位置:首页 > 运维架构 > Shell

shell中while循环里使用ssh的注意事项

2014-10-22 11:08 519 查看
#!/bin/bash
cat file1 | while read LINE
do
echo "this is $LINE"
ssh -lroot -p22 192.168.10.169 "df -h"
done
上述脚本期望实现的功能是:读取一个有多行内容的文件file1,每打印一行之后就用ssh远程执行显示远程主机的磁盘分区使用情况。
实际执行结果:只打印了第一行和执行了一次ssh命令,脚本就退出了。
案例原因解析:while中使用重定向机制,file1文件中的信息都已经读入并重定向给了整个while语句,所以当我们在while循环中再一次调用read语句,就会读取到下一条记录,但是,因为ssh会读取存在的缓存,调用完ssh语句后,输入缓存中已经都被读完了,当read语句再读的时候当然也就读不到纪录,循环也就退出了。
解决方法:对ssh使用输入重定向,而防止它去读while的缓存,或者使用for循环避免使用重定向的方式。代码如下:
#!/bin/bash
#
cat file1 | while read LINE
do
echo "this is $LINE"
ssh -lroot -p22 192.168.10.169 "df -h" < /dev/null
done
#!/bin/bash
#
for LINE in `cat file1`
do
echo "this is $LINE"
ssh -lroot -p22 192.168.10.169 "df -h"
done

本文出自 “逻辑,追求!” 博客,请务必保留此出处http://hjh524.blog.51cto.com/4248253/1566613
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: