想像できるように、仮想マシンのデフォルト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を使用して出力の3行目を取得できますが、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 )
より強くなりますが、明らかに長くなります。