使用for和while循环在bash中使用telnet进行日志记录

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

以下是部分自动执行任务的脚本(即telnet到ip地址并显示登录屏幕,一旦退出该telnet会话,脚本应该telnet以查找文件中存在的下一个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循环的脚本有什么问题?

解决方法

在你的while循环中,标准输入已从文件重定向,我怀疑telnet也通过标准输入从该文件读取.请尝试以下方法

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

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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...