从 IP 地址中分离出最后一个八位字节并将其放入变量中

Posted

技术标签:

【中文标题】从 IP 地址中分离出最后一个八位字节并将其放入变量中【英文标题】:Isolate the last octet from an IP address and put it in a variable 【发布时间】:2014-09-26 22:18:05 【问题描述】:

以下脚本:

IP=`ifconfig en0 inet | grep inet | sed 's/.*inet *//; s/ .*//'`

ipconfig 命令中分离出IP 地址,并将其放入变量$IP。 我现在如何将最后一个八位字节与所述 IP 地址隔离并将其放入第二个变量 - $CN

例如:

$IP = 129.66.128.72 $CN = 72 或 $IP = 129.66.128.133 $CN = 133...

【问题讨论】:

最好不要使用旧的和过时的反引号,而是使用像这样的括号IP=$(ifconfig.....) 【参考方案1】:

将“cut”命令与 .分隔符:

IP=129.66.128.72
CN=`echo $IP | cut -d . -f 4`

CN 现在包含最后一个八位字节。

【讨论】:

您可以将其缩短为:CN=$(cut -d. -f4 <<<$IP) <<< 是非标准的,并非所有 shell 都支持。【参考方案2】:

在 BASH 中你可以使用:

ip='129.66.128.72'
cn="$ip##*."
echo $cn
72

或者对非 BASH 使用 sed:

cn=`echo "$ip" | sed 's/^.*\.\([^.]*\)$/\1/'`
echo $cn
72

使用awk

cn=`echo "$ip" | awk -F '\\.' 'print $NF'`

【讨论】:

使用 awk 更短 cn=$(awk -F. '$0=$4' <<< $ip) @Jidder:我相信只有 BASH 支持<<<,这就是我在非 BASH 解决方案中使用管道的原因。 哦,好吧,不知道它是特定于 bash 的,$() bash 也是特定的吗? 不,$(...) 符合 POSIX 标准。 啊,这是正确的,感谢您纠正@chepner 我。总是有帮助的。【参考方案3】:

快捷方式:

read IP CN < <(exec ifconfig en0 | awk '/inet /  t = $2; sub(/.*[.]/, "", t); print $2, t ')

【讨论】:

&lt;( ... ) 是非标准的,并非所有 shell 都支持。【参考方案4】:

我不会使用ifconfig 来获取 IP,而是使用此解决方案,因为无论接口如何,它都会获取访问 Internet 所需的 IP。

IP=$(ip route get 8.8.8.8 | awk 'print $NF;exit')

并获取最后一个八位字节:

last=$(awk -F. 'print $NF' <<< $IP)

或直接获取最后一个八位字节:

last=$(ip route get 8.8.8.8 | awk -F. 'print $NF;exit')

【讨论】:

以上是关于从 IP 地址中分离出最后一个八位字节并将其放入变量中的主要内容,如果未能解决你的问题,请参考以下文章

需要将存储在 bash 变量中的 IP 地址分解为八位字节

获取IP地址并将其放入socket -java

复制缓冲区中的 IP 地址

需要帮助在 perl 中对数组进行排序

从结果中分离出 drupal 视图过滤器

Ping 并使用三个八位字节的 ipv4 地址。为啥它有效?