Linux 如何使用bash获取服务器的IP地址

Linux 如何使用bash获取服务器的IP地址,linux,bash,shell,awk,grep,Linux,Bash,Shell,Awk,Grep,目标: 从服务器中提取IP地址。然而,问题在于专用和VP非常不同。拉取、检查和打印IP地址的最佳或最理想的方法是什么 我想我可以做一个检查与以下 root@host]# /sbin/ifconfig venet0:0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}' IP IS HERE root@host]# /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ p

目标: 从服务器中提取IP地址。然而,问题在于专用和VP非常不同。拉取、检查和打印IP地址的最佳或最理想的方法是什么

我想我可以做一个检查与以下

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

要获取服务器的IP地址(无论是否为VPS),您可以执行以下操作:

#!/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命令的提示。

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

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

正在使用什么VPS软件?Xen、Virtuozzo或其他什么?这是OpenVZ。但最好能检查所有这些数据。难道不是所有VPE对ifconfig都遵循相同的venet:0:0吗?我相信是这样。您可以检查我的答案,它回答了您的问题,并提供了一个脚本,根据请求返回IP地址。