
以下のコードを使用して複数のサーバーにリモートでログインしています。
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
3つの出力ファイルを生成する理由は不明ですが、これはあなたの要求であり、私の要求ではないため、次のことが役に立ちます。
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厳密に言うと、#!/ bin / shまたは同様のshebang行を一番上に置く必要があります。ここで私が頼るのは、BashシェルがあるLinuxシステムで実行されているという事実です。