2011-10-18 13 views
1

どのようにしてIPだけを取得し、どのインターフェイスIPを取得できますか?私は、次のようなレコードファイルを保つことができるようにrealtime.iniBASHでは、すべてのインターフェイスのIPアドレスを正確に見つける方法はありますか?その他の情報はすべて削除しますか?

1 - test.sh

#!/bin/bash 
ipstring ='inet (.*)' 

for i in $(ip addr); 
do 
     echo $i #on found it write down to my realtime.ini as a list for future query 
done 

2 - realtime.ini

em1,192.168.1.2 
lo,127.0.0.1 
wlan0,<not found> 

フォローアップ:を1つだけのIPのために: $ ifconfig eth0 | grep 'inet addr:' |カット-d:-f2 | awkはあなたが両方のawkとsedを持っている場合 192.168.1.2

答えて

2

これはそれほどエレガントではなく、またbashのですが、次の操作を行うことができます '{$ 1印刷}':

ifconfig | awk 'BEGIN { FS = "\n"; RS = "" } { print $1 $2 }' | sed -e 's/ .*inet addr:/,/' -e 's/ .*//' 

を、私はいないだろうこれは大変ポータブルなので、誰かがより良い答えを持っているかもしれません。

2

あなたがmoreutilsパッケージをインストールした場合、あなたは便利なifdataコマンドを使用することができます

eth0,123.234.10.12 
lo,127.0.0.1 
vboxnet0,NON-IP 
wlan0,NON-IP 
wlan1,NON-IP 
:のみ eth0loがアップしている一方で、5つのインターフェース用

for INTF_PATH in /sys/class/net/* # list all interfaces 
do 
    INTF=$(basename $INTF_PATH) # interface name 
    echo "$INTF,$(ifdata -pa $INTF)" # interface name and address 
done 

の出力例は、