こういうコマンドを打ってみよう!
adb shell ip addr show | grep -oP 'inet \d+\.\d+\.\d+\.\d+' | grep -v 127.0.0.1 | grep -oP '\d+\.\d+\.\d+\.\d+'
出力例
192.168.10.64
解説
adb shell ip addr show
ネットワークの状態を表示します。ただしIPアドレス以外にもいろいろなテキストが表示されます。
表示例:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: sit0: <NOARP> mtu 1480 qdisc noop state DOWN
link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN
link/tunnel6 :: brd ::
4: p2p0: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state DORMANT qlen 1000
link/ether 92:b6:86:c1:01:6b brd ff:ff:ff:ff:ff:ff
inet6 fe80::90b6:86ff:fec1:16b/64 scope link
valid_lft forever preferred_lft forever
5: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 90:b6:86:c1:01:6b brd ff:ff:ff:ff:ff:ff
inet 192.168.10.97/24 brd 192.168.10.255 scope global wlan0
valid_lft forever preferred_lft forever
inet6 fe80::92b6:86ff:fec1:16b/64 scope link
valid_lft forever preferred_lft forever
6: rmnet_mhi0: <UP,LOWER_UP> mtu 3584 qdisc pfifo_fast state UNKNOWN qlen 1000
link/[530]
7: rmnet_data0: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
8: rmnet_data1: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
9: rmnet_data2: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
10: rmnet_data3: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
11: rmnet_data4: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
12: rmnet_data5: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
13: rmnet_data6: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
14: rmnet_data7: <> mtu 1500 qdisc noop state DOWN qlen 1000
link/[530]
この中で必要なのはinet
の後にあるIPアドレスです。
grep -oP 'inet \d+\.\d+\.\d+\.\d+'
-o
オプションはマッチした部分のみを出力するための指定です。何も指定しないと、grepはマッチした行を出力します。
-P
オプションはPerlの正規表現を利用する指定です。これを付けないと\d
などの指定ができません。
-o -P
と書いても良いのですが、まとめて-oP
と書くこともできます。
grep -v 127.0.0.1
-v
オプションは、マッチした行を除外するための指定です。127.0.0.1
というアドレスは自分自身を指すものなので、今回取得したいアドレスではありません。なので除外します。
grep -oP '\d+\.\d+\.\d+\.\d+'
再び-o
と-P
を使って、今度はinet 192.168.10.64
のような文字列から192.168.10.64
の部分のみを抜き出します。
これで見事コマンドラインでIPアドレスだけを取得できました!
おまけ
adb tcpip 5555
adb connect [端末のIPアドレス]
とすることでWi-Fi越しにadbコマンドが打てるようになるのですが、毎回IPアドレスを調べて手入力するのが面倒だったので、これを1コマンドでできるようにしてみました。
adb tcpip 5555 & adb wait-for-device & adb shell ip addr show | grep -oP 'inet \d+\.\d+\.\d+\.\d+' | grep -v 127.0.0.1 | grep -oP '\d+\.\d+\.\d+\.\d+' | xargs adb connect
xargs
を使うと標準出力を引数にできることを利用しました。