1

目标:从服务器中提取 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
4

2 回答 2

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;

希望这可以帮助。

提示jwpat7提供比 grep、cut、awk 更简洁的 awk 命令。

于 2012-10-08T20:16:52.800 回答
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}'
于 2012-10-08T20:28:10.647 回答