私のVPSマシンのIPを変数に入れる必要があります。私は、外部IPアドレスが出力値inet addr
の一部として表示されることです。ifconfig
私は試した:
ipa="$(hostname -i)"
しかしecho ${ipa}
、これによりlocalhost token:が発生した127.0.1.1
ために別の解決策が見つかりましawk
たawk
。
私はこれを試しました:
ipa=$(ifconfig | grep "inet addr:[0-999]\.[0-999]\.[0-999]\.[0-999]")
ただし、出力は空行なのでecho ${ipa}
失敗します。
私が試したのはなぜ失敗しましたか?それとも、少なくともどのように修正しますか?
答え1
ipa=$(ifconfig | perl -lane '/inet addr:(\S+)/ and $1 !~ "^127" and print $1')
また見てくださいここ多くの選択肢があります。たとえば、次のようにしますgrep
。
ipa=$(ifconfig | grep -Po 'inet addr:\K[^\s]+' | grep -v '^127')
説明する:
ipa=$( )
括弧内のコマンド出力をshowinterfaces変数ipa
ifconfig
とそのアドレスに割り当てます。ip address
| grep -Po 'inet addr:\K[^\s]+'
互換性のある正規表現を使用して出力をフィルタリングしperl
、一致するテキストフィルタを再印刷することをお勧めします
| grep -v '^127'
。今回は-v
()で始まる^
値を除外します。127
外部IPを取得するには、通常、次のようにします。
dig +short myip.opendns.com @resolver1.opendns.com
答え2
grep "inet addr:[0-999]\.[0-999]\.[0-999]\.[0-999]"
inet addr:
これは、文字列の後にto、a、またはaの数字である単一文字、その後にドットが続き、toまたはorの他の文字が続く文字列と一致しますが、たとえば一致しません。0
9
9
9
0
9
9
9
inet addr:1.2.3.4
inet addr:11.22.33.44
角かっこグループは、数値を構成する文字列と一致せず、単一の文字のみを一致します。