我有一个文件中的IP地址列表,我需要使用telnet登录并执行 一些命令(这些命令对于所有机器都不是唯一的,因此无法完全自动化。)。
以下是部分自动执行任务的脚本(即telnet到ip地址并显示登录屏幕,一旦退出该telnet会话,脚本应该telnet以查找文件中存在的下一个ip地址,依此类推。
我已经编写了两个脚本(两者都做同样的工作)来完成上述任务,一个使用进行循环,另一个使用 while 循环。使用 for 循环的脚本运行正常,登录到第一个ip后,使用 while 循环的脚本退出。
使用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循环的脚本有什么问题?
答案 0 :(得分:4)
在你的while循环中,标准输入已从文件重定向,我怀疑telnet也是通过标准输入从该文件读取的。请尝试以下方法:
while read -u 3 line; do
telnet $line
done 3< host_ip.txt
这使用0以外的文件描述符(标准输入)从文件中读取,保留telnet命令的标准输入。