4

我在一个文件中有一个 IP 地址列表,我需要使用 telnet 登录并执行一些命令(这​​些命令对所有机器都不是唯一的,因此不能完全自动化。)。

所以下面是部分自动化任务的脚本(即远程登录到IP地址并显示登录屏幕,一旦退出该远程登录会话,脚本应该远程登录文件中存在的下一个IP地址等等。

我编写了两个脚本(都做同样的工作)来完成上述任务,一个使用for循环,一个使用while循环。使用for循环的脚本工作正常,而使用while循环的脚本在登录到第一个 ip 后退出。

使用 for 循环的脚本:-

for i in `cat host_ip.txt`;
do 
    telnet $i;
done

使用失败的while循环的脚本:-

while read line;
do
   telnet $line ;
done < host_ip.txt

上面失败的while循环脚本的输出是

10.102.10.0
Trying 10.102.10.0...
telnet: connect to address 10.102.10.0: Network is unreachable
10.102.10.1
Trying 10.102.10.1...
Connected to 10.102.10.1.
Escape character is '^]'.
Connection closed by foreign host.

使用 while 循环的脚本有什么问题?

4

1 回答 1

4

在您的 while 循环中,标准输入已从文件重定向,我怀疑 telnet 也通过标准输入从该文件中读取。尝试以下操作:

while read -u 3 line; do
    telnet $line
done 3< host_ip.txt

这使用 0 以外的文件描述符(标准输入)从文件中读取,保留 telnet 命令的标准输入。

于 2012-08-14T12:40:43.937 回答