我正在使用下面的代码来远程登录多个服务器。
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}
答案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 系统上运行。