编写 shell 脚本,返回 eth0 的 IP 地址

今天笔试的题目。可惜啊,一时脑残,不记得
ifconfig eth0
的输出结果了。

ifconfig eth0 | grep IP

这个不对的吧?诶~ :joy:

个人觉得面试不过是应该的:

ifconfig wlan0 | grep “inet addr”

myip () {
        MY_IP=$(/usr/bin/ip addr show eth0 | awk '/inet/ { print $2 } ') 
        echo ${MY_IP:-"Not connected"}
}

怎么感觉ip的输出改了, inet后面没跟addr了

phoenix@Phoenix-X201i ~ % ifconfig
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::f2de:f1ff:fe39:6317  prefixlen 64  scopeid 0x20<link>
        ether f0:de:f1:39:63:17  txqueuelen 1000  (Ethernet)
        RX packets 195717  bytes 110037488 (104.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 165282  bytes 17962082 (17.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 20  memory 0xf2500000-f2520000  

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 45  bytes 9632 (9.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 45  bytes 9632 (9.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp2s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.106  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::8ea9:82ff:fe02:a772  prefixlen 64  scopeid 0x20<link>
        ether 8c:a9:82:02:a7:72  txqueuelen 1000  (Ethernet)
        RX packets 371  bytes 93836 (91.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 24  bytes 3212 (3.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


phoenix@Phoenix-X201i ~ % ip addr
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: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether f0:de:f1:39:63:17 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global enp0s25
       valid_lft forever preferred_lft forever
    inet6 fe80::f2de:f1ff:fe39:6317/64 scope link 
       valid_lft forever preferred_lft forever
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 8c:a9:82:02:a7:72 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.106/24 brd 192.168.1.255 scope global wlp2s0
       valid_lft forever preferred_lft forever
    inet6 fe80::8ea9:82ff:fe02:a772/64 scope link 
       valid_lft forever preferred_lft forever

只有 inet 和 inet6 看你要 v4 还是 v6

如果当然有电脑给我试试,也许可以改过来。and ifconfig eth0 | grep “inet addr” 出来的结果除了 IP 地址之外还有其它的一些东西,貌似可以用 awk 处理,不过不会 awk,我想,先把结果存档,然后用 sed 处理一下,应该也 ok 吧

ifconfig 的输出格式我见过两种了。

ip addr show enp3s0 | grep -oP ‘(?<=inet )\d.]+’

如果你的 grep 支持 -P 的话。

:stuck_out_tongue_closed_eyes:

ip addr show eth0|sed -n '/inet /p'|awk '{print $2}'|sed 's/\/.*//g'
ifconfig eth0|awk -F':' '/inet addr/{print $2}'|awk '{print $1}'