【问题标题】:What does the value of the bits variable means?bits 变量的值是什么意思?
【发布时间】:2019-05-30 12:45:45
【问题描述】:

我正在尝试从子网掩码中获取前缀,代码如下:

mask=255.255.254.0

oct1=$(echo $mask | awk -F. '{print $1}')
oct2=$(echo $mask | awk -F. '{print $2}')
oct3=$(echo $mask | awk -F. '{print $3}')
oct4=$(echo $mask | awk -F. '{print $4}')

for i in {1..4}; do
  for j in {7..0}; do
    bits=$((oct$i & ((1 << $j)) ? 1 : 0))
    ((prefix += $bits))
  done
done
echo $prefix

这确实有效,但我不知道变量位的值意味着什么。

【问题讨论】:

  • IFS=. read oct1 oct2 oct3 oct4 &lt;&lt;&lt; "$mask"

标签: bash awk syntax


【解决方案1】:

bits 变量计算掩码的每个八位字节中的位数...它以可用于 CIDR 表示法的位数表示子网掩码。

CIDR 表示法中子网 255.255.254.0 的示例 192.168.1.1 是 192.168.1.1/23。子网掩码的每个八位字节都是一个完整的字节(或 8 位)。 255 = 打开所有 8 位。所以 255.255.254.0 是 255 (8bits) + 255 (8bits) + 254 (7bits) + 0 (0bits) = 23 bits开启。

【讨论】:

  • 谢谢,我明白了,但是 "&" 和 "? 1 : 0" 是做什么的?能不能说的具体点?
  • 这是一个三元运算符 - 基本上是一个内联 If 语句:(eval 表达式)? (真表达式) : (假表达式) 所以:如果八位字节值的“j”位评估为 TRUE,则返回 1,否则返回 0。
  • & 是按位与比较运算符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-30
  • 2023-03-29
  • 2012-03-05
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多