Security
將外部 IP 放入變數 - grep 操作失敗
我需要將我的 VPS 機器的 IP 放入一個變數中。我的意思是
inet addr
在ifconfig
輸出中出現部分值的外部 IP 地址。我試過了:
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}
有一個空的輸出行。為什麼我嘗試過的失敗了,或者至少你將如何解決它?
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=$( )
將括號中的命令輸出分配給變數ipa
ifconfig
show interfaces 及其地址。您可能更喜歡ip address
| grep -Po 'inet addr:\K[^\s]+'
使用perl
兼容的正則表達式過濾輸出,再次列印匹配的文本
| grep -v '^127'
過濾器,這次排除以 ( ) 開頭的 ( )-v
值^``127
要獲取我的外部 IP,我通常會這樣做:
dig +short myip.opendns.com @resolver1.opendns.com