テキストファイルから複数のサーバーにリモートでログインするシェルスクリプト

テキストファイルから複数のサーバーにリモートでログインするシェルスクリプト

以下のコードを使用して複数のサーバーにリモートでログインしています。

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システムで実行されているという事実です。

おすすめ記事