2017-01-13 4 views
0

bashスクリプトの出力に2つのリストを結合しようとしています。 1つのリストはマシン名のリストです。もう1つのリストはIPアドレスのリストです。次に、ポート3389のIPにtelnetで接続できるかどうかを出力します。これは、Windowsマシンがそのポートで応答しているインベントリを取得しています。ここで2つのリストを通ってループし、ホスト名とIPを一致させるためのbashループ

は私が思い付いたものです:

#!/bin/bash 
file1="machine_list.txt" 
file2="ip_list.txt" 
HOSTS=$(cat "$file1") 
IP=$(cat "$file2") 

for h in $HOSTS 
do 
for i in $IP 
do 
     echo "checking RDP port on host: $h" 
     /usr/bin/telnet $i 3389 
     echo 
     sleep 2 
done 
done 

成功した接続の出力は次のようになります。

checking RDP port on host: USAMZADP3000 
Trying 10.1.233.65... 
Connected to 10.1.233.65. 
Escape character is '^]' 

しかし、それは本当にやっていることは同じマシン名をループして与えています同じマシン名の別のIPアドレス。私は、マシン名とIPアドレスが正確で、1対1の相関があることを望みます。

私は間違っていますか?私は望む結果をどのように得ることができますか?

+0

マシン名とIPアドレスが2つの異なるファイルにあるのはなぜですか?あなたはそれらをどのように相関させますか?また、Windowsでこれを実行していますか? – codeforester

+0

マシン名とIPアドレスは、このようにスクリプトを書く方が簡単だと思っていたため、別のファイルにあります。両方を同じファイルに保存する方が簡単だと思われる場合は、教えてください。 そして、私はこのスクリプトを流行しているCentOS72(linux)サーバー上で実行しています。しかし、私はWindowsマシンと同じネットワーク上にあり、アクセス可能であればテストしなければならない。 – bluethundr

答えて

2

2つのファイルを並行して読みたいようです。あなたのループはネストされているので、あなたのコードは1つのマシン名をとり、IPファイル全体を読み取ってから、2番目のマシン名を取り、IPファイル全体を読み取るなどです。whileループを使って両方のファイルを同時に読むことができます。

while read machineHostName <&3 && read machineIPAddr <&4; do  
    echo "checking RDP port on host: $machineHostName" 
    /usr/bin/telnet $machineIPAddr 3389 
    echo 
    sleep 2 
done 3<$file1 4<$file2 

このrelated questionが参考になる場合があります。

+0

リンクを投稿するだけではなく、関連情報をあなたの答えにコピーしてください。 – Barmar

+0

ありがとう、これは完璧です。私はあなたの例から学ぶことを試みます! – bluethundr

関連する問題