我正在尝试编写一个bash
脚本来获取服务器上的所有IP地址.该脚本应适用于所有主要发行版.这是我有的:
ifconfig | grep 'inet addr:' | awk {'print $2'}
Run Code Online (Sandbox Code Playgroud)
导致:
addr:10.1.2.3
addr:50.1.2.3
addr:127.0.0.1
Run Code Online (Sandbox Code Playgroud)
我怎么能先删除addr:
前缀?第二,我怎么能排除127.0.0.1
?
Ped*_*rda 14
ifconfig
被淘汰了ip
.它还具有-o
写输出易于解析的标志.用于ip -4
仅显示IPV4地址.注意更简单的脚本,它已经排除了环回地址:
ip -o addr | awk '!/^[0-9]*: ?lo|link\/ether/ {print $2" "$4}'
Run Code Online (Sandbox Code Playgroud)
或者如果您不想要网络:
ip -o addr | awk '!/^[0-9]*: ?lo|link\/ether/ {gsub("/", " "); print $2" "$4}'
Run Code Online (Sandbox Code Playgroud)
没有必要grep
.这是使用的一种方式awk
:
仅列出地址:
ifconfig | awk -F "[: ]+" '/inet addr:/ { if ($4 != "127.0.0.1") print $4 }'
Run Code Online (Sandbox Code Playgroud)
列出设备和地址:
ifconfig | awk -v RS="\n\n" '{ for (i=1; i<=NF; i++) if ($i == "inet" && $(i+1) ~ /^addr:/) address = substr($(i+1), 6); if (address != "127.0.0.1") printf "%s\t%s\n", $1, address }'
Run Code Online (Sandbox Code Playgroud)
只需使用hostname
该-I
标志,您就可以获取所有IP地址的列表。
即
$ hostname --all-ip-addresses || hostname -I
10.10.85.100 10.20.85.100 10.30.85.100
Run Code Online (Sandbox Code Playgroud)
而
$ hostname --ip-address || hostname -i
::1%1 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
Centos7(k3.10.0)
归档时间: |
|
查看次数: |
23618 次 |
最近记录: |