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

サーバーが 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 に敬意を表します。

于 2012-10-08T20:16:52.800 に答える
1

どのインターフェイスを確認するかを決定する方法については、前の回答を参照してください。以下は、grep/cut/awk の 3 つのプロセス シーケンスを単一の awk に置き換える方法を示しています。次のいずれかの形式を使用してください。inet addr最初の行で、awkは、空白のデフォルトの FS フィールド区切り記号で分割した後、コロンで分割する任意の行に一致します。2 行目で、 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 に答える