有人能告诉我如何从显示输出中找到具有两个IP地址值的最高IP地址。请帮忙 。 我尝试了以下,是任何其他更好的选择。
set ip1 "10.2.244.255"
set ip2 "10.2.33.224"
set ip1 [split $ip1 .]
set ip2 [split $ip2 .]
foreach i $ip1 j $ip2 {
if { $i > $j} {
puts "ip1 is greater" break
} elseif { $i < $j } {
puts "ip2 is greater" break
} elseif { $i == $j } {
continue
}
}
答案 0 :(得分:2)
一种选择是使用-dictionary
的{{1}}选项,该选项对字符串中的数字执行正确的操作:
[lsort]
将ip地址从最小到最大排序。所以结果是列表中的最后一个数字。
您可以将其封装在一个函数中:
lsort -dictionary {10.2.244.255 10.2.33.224}
答案 1 :(得分:0)
IP地址只是32位值的人类难忘表示。 tcllib ip package有命令操纵这些,在这种情况下,我认为ip::toInteger
最有用。
proc compareIp {addr1 addr2} {
expr {[ip::toInteger $addr2] - [ip::toInteger $addr1]}
}
应该给出小于,等于或大于比较的通常的负0,正结果。该软件包还将处理网络或地址集的屏蔽地址(即:10.0.1.0/16)。