2012-10-08 212 views
1

目标: 从服务器拉取IP地址。然而,这个问题发挥作用,专用和VPS是非常不同的。什么是最好或最理想的方式来进行检查并打印IP地址?如何使用bash获取服务器的IP地址

我想我可以用下面的方法进行检查吗?

[email protected]]# /sbin/ifconfig venet0:0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' 
IP IS HERE 
[email protected]]# /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' 
eth0: error fetching interface information: Device not found 
+0

正在使用哪些VPS软件? Xen,Virtuozzo还是别的? – Chimera

+0

这是OpenVZ。但是能够全部检查它们是理想的。不是所有的VPS都遵循相同的venet:ifconfig是0:0吗? –

+0

我相信如此。你可以检查我的答案,它回答你的问题,并提供一个脚本,根据请求返回IP地址。 – Chimera

回答

1

为了获得无论是VPS或没有,你可以做以下服务器的IP地址:

#!/bin/bash 

a="`netstat -i | cut -d' ' -f1 | grep eth0`"; 
b="`netstat -i | cut -d' ' -f1 | grep venet0:0`"; 

if [ "$a" == "eth0" ]; then 
    echo "eth0 found" 
    ip="`/sbin/ifconfig eth0 | awk -F':| +' '/inet addr/{print $4}'`"; 
elif [ "$b" == "venet0:0" ]; then 
    echo "venet found" 
    ip="`/sbin/ifconfig venet0:0 | awk -F':| +' '/inet addr/{print $4}'`"; 
fi 

echo $ip; 

希望这有助于。

为了提供比grep,cut,awk更简洁的awk命令,提示到jwpat7

1

有关如何确定要查看的界面,请参阅上一个答案。以下显示了如何用单个awk替换grep/cut/awk的三进程序列。使用以下任一形式。在第一行中,awk匹配包含inet addr的任何行,并在分隔默认的空白字段的分隔符后,在冒号上分割。在第二行中,awk分割“:”或一串空格的正则表达式。

ifconfig eth0 | awk '/inet addr/{split($2,a,":"); print a[2]}' 
ifconfig eth0 | awk -F':| +' '/inet addr/{print $4}'