任何人都可以仅使用 netstat -rn、while、read 和 cut 命令获取默认 ip 吗?

任何人都可以仅使用 netstat -rn、while、read 和 cut 命令获取默认 ip 吗?

正如您所想象的,我应该只使用这些命令来获取虚拟机的默认 IP。 netstat -rn 给出以下输出

Kernel IP routing table
Destination   Gateway        Genmask ...
0.0.0.0       138.248.123.23 ....

我需要获取 138.248.123.23(这是一个虚构的 IP),但我无法使用 awk 或 sed。我可以使用 while 和 read 获取输出的第三行,但无法使用 cut 命令提取它。我已经尝试过netstat -rn | cut -f2 -d$'\t',但没有成功...

答案1

不确定我是否遵循,但是这个?

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 enp0s25
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 wlp3s0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 enp0s25
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlp3s0
192.168.100.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr1
192.168.122.0   0.0.0.0         255.255.255.0   U         0 0          0 virbr0

# netstat -rn | while read dest gw rest ; do [[ "${dest}" == "0.0.0.0" ]] && echo "${gw}" ; done
192.168.1.1
192.168.1.1

答案2

为什么不能使用 awk 和 sed ?

这是另一种解决方案:

grep ^0.0.0.0 | tr -s " " | cut -f2 -d" "

-s选项将空格字符串转换为单个空格。

答案3

仅使用 netstat 和 shell,您可以执行以下操作

set -- $(netstat -rn)
shift 13
echo $1

但这有点脆弱。

x=$(netstat -rn | while read a b rest ; do [ a = "0.0.0.0" ] || continue ; echo $b ; break ; done )

更坚固,但显然更长。

相关内容