2016-04-07 9 views
1

私はファイルip_details.txtを次のように持っています。bashスクリプト - ループ内に2つの変数があります

Peer "ATBBB010.domain.com:1111;transport=tcp" ConnectAddress="10.184.88.29,10.184.88.30" LocalPort="0" 
Peer "ATBBB020.domain.com:1111;transport=tcp" ConnectAddress="10.184.88.61,10.184.88.62" LocalPort="0" 
Peer "CHBBB010.domain.com:1111;transport=tcp" ConnectAddress="10.161.144.5,10.161.144.6" LocalPort="0" 
Peer "CHBBB020.domain.com:1111;transport=tcp" ConnectAddress="10.161.144.21,10.161.144.22" LocalPort="0" 
Peer "DABBB010.domain.com:1111;transport=tcp" ConnectAddress="10.160.130.5,10.160.130.6" LocalPort="0" 
Peer "DABBB020.domain.com:1111;transport=tcp" ConnectAddress="10.160.130.21,10.160.130.22" LocalPort="0" 
Peer "ATCCC010.domain.com:1111;transport=tcp" ConnectAddress="10.199.88.29,10.199.88.30" LocalPort="0" 
Peer "ATCCC020.domain.com:1111;transport=tcp" ConnectAddress="10.199.88.61,10.199.88.62" LocalPort="0" 
Peer "CHCCC010.domain.com:1111;transport=tcp" ConnectAddress="10.161.155.5,10.161.155.6" LocalPort="0" 
Peer "CHCCC020.domain.com:1111;transport=tcp" ConnectAddress="10.161.155.21,10.161.155.22" LocalPort="0" 
Peer "DACCC010.domain.com:1111;transport=tcp" ConnectAddress="10.199.130.5,10.199.130.6" LocalPort="0" 
Peer "DACCC020.domain.com:1111;transport=tcp" ConnectAddress="10.199.130.21,10.199.130.22" LocalPort="0" 

私は現在、これらの2つのスクリプト/コマンドを使用して、特定のタイプのノードのIPアドレスをpingします。

BBBノードに最初にIP(カンマ区切り文字の前のIP)をpingするには、次のように入力します。 PingのBBBノード2 IPに

for i in `cat ip_details.txt | grep BBB | awk '{print $3}' | cut -d= -f2 | cut -d, -f1 | tr -d '[="=]'`; do ping -I eth0 -c 3 $i >> /dev/null ; [ $? != 0 ] && echo $i || echo "Ping to $i Good"; done 

(IPカンマ区切りの後)。

for i in `cat ip_details.txt | grep BBB | awk '{print $3}' | cut -d= -f2 | cut -d, -f2 | tr -d '[="=]'`; do ping -I eth0 -c 3 $i >> /dev/null ; [ $? != 0 ] && echo $i || echo "Ping to $i Good"; done 

次のようになります。

Ping to 10.184.88.29 Good 
Ping to 10.184.88.61 Good 
. 
. 

同様に、私はCCCノードに対してCCCをgrepします。

これらのIPアドレスをノードタイプごとにpingするか、または両方のタイプを一緒にして出力するスクリプトが必要です。

Ping from <hostname> to ATBBB010 IP1 <ip address> is Good 
.... 
.... 
.... 

Ping from <hostname> to ATBBB010 IP2 <ip address> is Good 
.... 
.... 
.... 

pingが失敗した場合

Ping from <hostname> to ATBBB010 IP1 <ip address> failed 
..... 
..... 

Ping from <hostname> to ATBBB010 IP2 <ip address> failed 
..... 
..... 
+1

答えはあなたの問題を解決した場合、アップ投票(アップ票も横にして、必要に応じて(✓)大のチェックマークをクリックして、それを受け入れてください。少なくとも15の評判ポイントが必要です)。 他の回答が有益だった場合は、投票してください。受諾およびアップ投票は将来の読者に役立ちます。関連するヘルプセンターの記事(http://stackoverflow.com/help/someone-answers)を参照してください。質問にまだ完全に回答していない場合は、フィードバックを提供してください。 – mklement0

答えて

1

次のことを試してみてください。

#!/usr/bin/env bash 

msgPrefix="Ping from $HOSTNAME to" 
prevNode= 
while read node ip; do 
    [[ "$node" == "$prevNode" ]] || i=1 
    ping -I eth0 -c 3 "$ip" >/dev/null && status='is good' || status='failed' 
    echo "$msgPrefix $node IP$i $ip $status" 
    ((++i)); prevNode=$node 
done < <(awk -F'"|\\.domain\\.com|,' '{ print $2, $5 }' ip_details.txt) 
+0

ありがとうmklement0。 –

+0

動作しませんでした。私は 'code'を得る[root @ Linux1 temp]#./testPing awk:警告:エスケープシーケンス' \。 '平凡なものとして扱われます。 使用法:ping [-LRUbdfnqrvVaA] [-cカウント] [-i間隔] [-w期限] [-pパターン] [-sパケットサイズ] [-t ttl] [-Iインターフェイスまたはアドレス] [-M mtu discovery hint] [-S sndbuf] [-Tタイムスタンプオプション] [-Q tos] [hop1 ...]宛先 Linux1からATBBB010へのping IP1 10.184.88.29が失敗しました 使用法:ping [-LRUbdfnqrvVaA] [-c [-i pattern] [-s packetize] [-t interface] [-I interfaceまたはaddress] ''コード ' –

+0

Re awk警告:' \ 'インスタンスを' -F'オプション引数に追加しました。 – mklement0

関連する問題