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

时间:2012-10-08 19:58:30

标签: linux bash shell awk grep

目标: 从服务器中提取IP地址。然而,问题发挥作用,专用和VPS是非常不同的。拉出并检查并打印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

2 个答案:

答案 0 :(得分:1)

要获取服务器的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;

希望这有帮助。

向[{3}}提示,提供比grep,cut,awk更简洁的awk命令。

答案 1 :(得分:1)

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

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