【问题标题】:logging using telnet in bash using for and while loop使用 for 和 while 循环在 bash 中使用 telnet 进行日志记录
【发布时间】:2021-07-22 22:45:07
【问题描述】:

我在一个文件中有一个 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循环的脚本有什么问题?

【问题讨论】:

    标签: bash


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-02-11
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多