在 BASH 中,有什么方法可以准确找到所有接口的 IP 地址吗?并删除所有其他信息?

发布于 2024-12-10 12:46:33 字数 472 浏览 0 评论 0原文

我怎样才能只获取IP以及它是哪个接口IP?这样我就可以保留一个记录文件,例如 realtime.ini

1 - test.sh

#!/bin/bash
ipstring ='inet (.*)'

for i in $(ip addr);
do
        echo $i #on found it write down to my realtime.ini as a list for future query
done

2 - realtime.ini

em1,192.168.1.2
lo,127.0.0.1
wlan0,<not found>

后续: 仅针对单个 ip: $ ifconfig eth0 | grep 'inet 地址:' |剪切-d:-f2 | awk '{打印$1}' 192.168.1.2

How can i get only IP and which interface IP it is? So that i can keep a record file such as realtime.ini

1 - test.sh

#!/bin/bash
ipstring ='inet (.*)'

for i in $(ip addr);
do
        echo $i #on found it write down to my realtime.ini as a list for future query
done

2 - realtime.ini

em1,192.168.1.2
lo,127.0.0.1
wlan0,<not found>

Follow up: Just for single ip:
$ ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
192.168.1.2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

誰認得朕 2024-12-17 12:46:33

这不是非常优雅,bash 也不是,但是如果您同时拥有 awk 和 sed,您可以执行以下操作:

ifconfig | awk 'BEGIN { FS = "\n"; RS = "" } { print $1 $2 }' | sed -e 's/ .*inet addr:/,/' -e 's/ .*//'

我也不认为它具有巨大的可移植性,所以也许有人有更好的答案。

This is not terribly elegant, nor is bash, but you can do the following if you have both awk and sed:

ifconfig | awk 'BEGIN { FS = "\n"; RS = "" } { print $1 $2 }' | sed -e 's/ .*inet addr:/,/' -e 's/ .*//'

I wouldn't bet on this being hugely portable either, so maybe someone has a better answer.

酒几许 2024-12-17 12:46:33

如果您安装 moreutils 软件包,您可以使用方便的 ifdata 命令:

for INTF_PATH in /sys/class/net/* # list all interfaces
do
    INTF=$(basename $INTF_PATH) # interface name
    echo "$INTF,$(ifdata -pa $INTF)" # interface name and address
done

5 个接口的示例输出,而只有 eth0lo 已启动:

eth0,123.234.10.12
lo,127.0.0.1
vboxnet0,NON-IP
wlan0,NON-IP
wlan1,NON-IP

if you install moreutils package, you can use handy ifdata command:

for INTF_PATH in /sys/class/net/* # list all interfaces
do
    INTF=$(basename $INTF_PATH) # interface name
    echo "$INTF,$(ifdata -pa $INTF)" # interface name and address
done

example output for 5 interfaces, while only eth0 and lo are up:

eth0,123.234.10.12
lo,127.0.0.1
vboxnet0,NON-IP
wlan0,NON-IP
wlan1,NON-IP
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文