18

「myip」という単純な機能を実行するようにbashrcファイルを編集したいと考えています。ご想像のとおり、関数 myip は自分のマシンの内部 IP アドレスのみを出力します。

私が取り組んだ限り、これはスクリプトです:

ifconfig en1 | awk '{ print $2}' | sort

これは私のこの出力を得ました:

10.0.0.12
options=1<PERFORMNUD>
flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>
fe80::daa2:5eff:fe96:ba2f%en1
d8:a2:5e:96:ba:2f
autoselect
active

私はMac OS Xで作業しています。

どうすればこれを行うことができますか?

4

20 に答える 20

26

ここでは、次の両方が機能します (CentOS 5)。

ip addr show eth0 | awk '$1 == "inet" {gsub(/\/.*$/, "", $2); print $2}'

ifconfig eth0 | awk '/inet addr/ {gsub("addr:", "", $2); print $2}'

OS X (少なくともv10.11 (El Capitan)) の場合:

ifconfig en0 | awk '$1 == "inet" {print $2}'
于 2014-05-29T13:46:17.063 に答える
8

次のように、行の選択と IP アドレスの解析のawk両方を行うために使用できます。inet

$ ip addr ls docker0 | awk '/inet / {print $2}' | cut -d"/" -f1
172.17.42.1

eth0上記の例では、 のデバイス ハンドルを に置き換えdocker0ます。また、純粋なAWK実装が必要な場合は、次のように「カット」を行うことができます。

$ ip addr ls docker0 | awk '/inet / {split($2, ary, /\//); print ary[1]}'
172.17.42.1
于 2014-09-06T13:06:49.523 に答える
6

BASH4+ を使用した IPv4 の例

例 1、ホスト名を使用:

  hostname -I|cut -d" " -f 1

例 2、デバイスが既知である (変更されない) :

  ifconfig ens5 | grep "inet" | awk '{print $2}' |  sed 's/[^0-9.]*//g'

例 3、今はデバイス (eth0、eth1、enp0s23、または wpxxx など) を使用しない:

 ip a | awk 'BEGIN{ "hostname -I|cut -d\" \" -f 1" | getline ip} $2 ~ ip {print "Device: "$NF "  IP: "$2}'

例 4、ネットワーク IP アドレスが必要な場合:

 wget -q -O /dev/stdout http://checkip.dyndns.org/ | cut -d":" -f2 | cut -d \< -f1

楽しい。

于 2016-02-17T16:42:26.797 に答える
3

ifconfig を解析する以外に、IP アドレスを取得する別の簡単な方法があります。

hostname -I -I, --all-ip-addresses all addresses for the host -i, --ip-address addresses for the hostname

参照: http://linux.die.net/man/1/hostname

例:

[ec2-user@terraform ~]$ ホスト名 -I
10.10.10.10

于 2015-12-18T16:46:14.440 に答える
2

「inet6」ではなく「inet」だけを探している場合、これは私にとってはうまくいきます:

/usr/bin/ifconfig eth0 | grep --word-regexp inet | awk '{print $2}'

「--word-regexp」を指定すると、grep は「inet」という単語全体を検索し、単語の部分一致には一致しません。つまり、「inet」は「inet6」には一致しません。「inet」は、「inet」を含む行のみに一致します。 .

于 2015-02-23T21:26:43.940 に答える
0

使用する:

ifconfig enops3 | grep broadcast | cut -d " " -f10

enops3インターフェイス名はどこにありますか。

于 2015-11-07T10:51:03.213 に答える
0

VDS/VPS でも動作するコード:

ifconfig | grep -A2 "venet0:0\|eth0" | grep 'inet addr:' | sed -r 's/.*inet addr:([^ ]+).*/\1/' | head -1

また

ifconfig | grep 'inet addr:' | grep -v 127.0.0.1 | head -n1 | cut -f2 -d: | cut -f1 -d ' '
于 2015-10-18T06:10:33.273 に答える
0

このコードは、すべてのネットワーク接続(ループバックを除く)の IP アドレスを出力し、ほとんどのOS X と Linux のバージョン間で移植可能です。

これは、次のようなマシンで実行されるスクリプトに特に役立ちます。

  • アクティブなネットワーク アダプタが不明です。
  • Wi-Fi 接続とイーサネット接続を切り替えるノートブック、および
  • 複数のネットワーク接続を持つマシン。

スクリプトは次のとおりです。

/sbin/ifconfig -a | awk '/(cast)/ {print $2}' | cut -d: -f2

これは、次のようなスクリプトで変数に割り当てることができます。

myip=$(/sbin/ifconfig -a | awk '/(cast)/ {print $2}' | cut -d: -f2)

スクリプトは、次のように、ループを使用して結果を処理することにより、可能な複数のアドレスを処理できます。

if [[ -n $myip ]]; then
  count=0
  for i in $myip; do
    myips[count]=$i       # Or process as desired
    ((++count))
  done
  numIPaddresses=$count   # Optional parameter, if wanted
fi

ノート:

  • 「キャスト」で「ifconfig」をフィルタリングします。これは、ほとんどの OS X および Linux バージョンでも機能しながら、ループバック アドレスをフィルタリングする追加の効果があるためです。
  • 最後の 'cut' 関数は、Linux で適切に機能するために必要ですが、OS X では必要ありません。ただし、OS X の結果には影響しないため、移植性のために残されています。
于 2016-01-03T00:14:44.870 に答える
0

これは私のために働く:
ifconfig eth0 | awk '/inet addr/{print substr($2,6)}'

于 2015-09-01T14:21:55.907 に答える
-1
ifconfig eth0 | awk '/inet addr/{sub("addr:",""); print $2}'
于 2015-10-23T22:07:15.680 に答える
-1

コマンド出力を解析し、構文を組み合わせる方法の一般的なアイデアを提供する、単純な AWK + Bash スクリプトの例。

完全なコードはhttps://gist.github.com/darkphase/67d7ec22d47dbebd329eにあります。

BEGIN { RS = "" ; FS = "\n" }  # Change separator characters
{
    while ( "'"$cmd"'" | getline ){
        # print $0
        if ( $1 !~ /LOOPBACK/ ){

            split($1,arr," ")
            print "'"$blue"'"arr[1]"'"$reset"'"

            for(i = 1; i <= NF; i++) { # Loop through fields (this case lines)
                split($i,arr," ")
                switch ( arr[1] ) {
                    case "inet":
                        print "'"$red"'" "IPV4:" "'"$reset"'" "\n IP: " "'"$yellow"'" arr[2] "'"$reset"'" "\n NM: "arr[4]"\n BC: "arr[6]
                        break
                    case "inet6":
                        print "'"$red"'" "IPV6:" "'"$reset"'" "\n IP: "arr[2]"\n PL: "arr[4]
                        break
                    case "ether":
                        print "'"$red"'" "MAC: " "'"$reset"'" arr[2]
                        break
                    default:
                }
            }
            print ""
        }
    }
}'
于 2016-01-23T00:11:20.320 に答える