从文本文件远程登录多个服务器的 Shell 脚本

从文本文件远程登录多个服务器的 Shell 脚本

我正在使用下面的代码来远程登录多个服务器。

file=ip.txt
while read line
do
  ip=$( echo "$line" |cut -d ' ' -f 1 )
  port=$( echo "$line" |cut -d ' ' -f 2 )
  if  telnet  $ip $port </dev/null 2>&1 | grep -q Escape 
  then  
    echo "$ip $port Connected" >> Telnet_Success.txt
  elif  telnet  $ip $port </dev/null 2>&1 | grep -q refused 
  then
    echo "$ip $port Refused" >> Telnet_Refused.txt
  else
    echo "$ip $port Failed" >> Telnet_Failure.txt
  fi
done < ${file}

输入文件为 txt 在此输入图像描述预期输出是在此输入图像描述我得到的输出为在此输入图像描述我需要编写一个脚本来获得预期的输出。

答案1

我不清楚您为什么希望创建三个输出文件,但由于这是您的要求而不是我的要求,也许以下内容会有所帮助。

data=${1:-ip.txt} while read host port; do preamble="telnet $host $port" case $(telnet $host $port </dev/null 2>&1 | tail -1) in (*closed*) echo "$preamble ... Connected" >>Telnet_Success.txt ;; (*refused*) echo "$preamble ... Refused" >>Telnet_Refused.txt ;; (*) echo "$preamble ... Failed" >>Telnet_Failure.txt esac done <$data exit

第一行允许您通过将输入数据作为参数提供给脚本来决定在另一个文件(例如 data.txt)中提供输入数据。例如

$ telnet.sh data.txt

如果未给出,它将采用文件“ip.txt”。然后使用case语句匹配命令输出的最后一行来确定结果消息所在的文件。

请注意,该read语句允许您在输入行上选取单独的“单词”——从而消除了使用像cut这里这样的命令的需要。此外,您使用文件的方式意味着脚本的后续运行将添加到现有的输出行中。那可能不是你想要的。

华泰

PS 严格来说,我应该在顶部放置一个 shebang 行,如:#!/bin/sh 或类似的。我在这里依赖的事实是我正在带有 Bash shell 的 Linux 系统上运行。

相关内容