use*_*381 35 linux bash awk sed
我想在我的Debian 7.3上制作大脚本(类似翻译的内容和更多新的用户友好环境).我有个问题.我只想使用命令给我的一些信息.例如,我的ifconfig看起来像:
eth0 Link encap:Ethernet HWaddr 08:00:27:a3:e3:b0
inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea3:e3b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1904 errors:0 dropped:0 overruns:0 frame:0
TX packets:2002 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1309425 (1.2 MiB) T
Run Code Online (Sandbox Code Playgroud)
我想只显示IP地址:echo"你的IP地址是:(IP_ADDRESS)".是否有任何命令允许我做这样的事情,在流中搜索我想要得到的信息?我知道grep,sed但我对他们并不是很好.
编辑:首先要感谢您帮我解决这个问题,现在我知道了更多.其次说项目正在进行中.如果有人对它感兴趣,请关注我.
Jot*_*tne 81
如果目标是找到在互联网方向上连接的IP地址,那么这应该是一个很好的解决方案.
UPDATE!使用新版本的linux,您可以获得更多有关该行的信息:
ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
cache
Run Code Online (Sandbox Code Playgroud)
所以要获得IP,你需要在src之后找到IP
ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}'
10.36.15.150
Run Code Online (Sandbox Code Playgroud)
找到使用的IP和接口:
ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}'
ens192
Run Code Online (Sandbox Code Playgroud)
然后提取IP:
my_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')
my_interface=$(ip route get 8.8.8.8 | awk -F"dev " 'NR==1{split($2,a," ");print a[1]}')
Run Code Online (Sandbox Code Playgroud)
ip route没有打开任何连接,它只显示到达的路线8.8.8.8.8.8.8.8是谷歌的DNS.
为何其他解决方案可能失败
ifconfig eth0
Hostname -I
如果您想将其存储到变量中,请执行以下操作:
ip route get 8.8.8.8
8.8.8.8 via 10.36.15.1 dev ens160 src 10.36.15.150 uid 1002
cache
Run Code Online (Sandbox Code Playgroud)
Mar*_*erg 35
要获取您的IP地址:
echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`
Run Code Online (Sandbox Code Playgroud)
这将为您提供eth0的IP地址.
编辑:由于最近版本的Ubuntu中接口的名称更改,这不再起作用.相反,你可以使用这个:
hostname --all-ip-addresses或者hostname -I,它做同样的事情(给你主机的所有IP地址).
use*_*001 35
如果要获取以空格分隔的IP列表,可以使用hostname带有--all-ip-addresses(short -I)标志的命令
hostname -I
Run Code Online (Sandbox Code Playgroud)
如下所述:将IP地址放入bash变量中.有更好的方法吗?
ip route get 8.8.8.8| grep src| sed 's/.*src \(.* \)/\1/g'|cut -f1 -d ' '
Run Code Online (Sandbox Code Playgroud)
可能不适用于所有情况(尤其是如果您有多个NIC),这将有所帮助:
hostname -I | awk '{ print $1 }'
Run Code Online (Sandbox Code Playgroud)