我需要将我的 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}
有一个空的输出行。
为什么我尝试过的失败了,或者至少你将如何解决它?
另请参阅此处以获取大量替代方案。例如使用
grep
:解释:
ipa=$( )
将括号中的命令输出分配给变量ipa
ifconfig
show interfaces 及其地址。您可能更喜欢ip address
| grep -Po 'inet addr:\K[^\s]+'
使用perl
兼容的正则表达式过滤输出,再次打印匹配的文本| grep -v '^127'
过滤器,这次排除以 ( ) 开头的 ( )-v
值^
127
要获取我的外部 IP,我通常会这样做:
这将匹配字符串
inet addr:
后跟单个字符,该字符是从0
to9
或 a9
或 a的数字9
,后跟一个点,然后是另一个字符0
to9
or9
or9
... 例如inet addr:1.2.3.4
,但不是inet addr:11.22.33.44
。括号组不匹配形成数字的字符串,只匹配单个字符。