在Bash循环中生成IP地址列表

时间:2016-10-29 23:32:12

标签: bash

我需要一个从130.15.0.0到130.15.255.255的IP地址列表。我试过这个,但我意识到它会创建255个列表。有人可以帮我解决这个问题吗?

for (( i = 0; i <= 255; i++)) ; do
for (( j = 0; j <= 255; j++)) ; do
LIST="$LIST 130.15.$i.$j"
done
done

1 个答案:

答案 0 :(得分:32)

我会说你的方法有效,但它很慢 1 。您可以改为使用大括号扩展:

echo 135.15.{0..255}.{0..255}

或者,如果您想将结果放在变量中,只需指定:

list=$(echo 135.15.{0..255}.{0..255})

如果您想要数组中的地址,可以跳过echo和命令替换:

list=(135.15.{0..255}.{0..255})

现在,list是一个合适的数组:

$ echo "${list[0]}"                    # First element
135.15.0.0
$ echo "${list[@]:1000:3}"             # Three elements in the middle
135.15.3.232 135.15.3.233 135.15.3.234

对您的代码的评论:

  • 而不是

    list="$list new_element"
    

    使用

    添加到字符串更容易
    list+=" new_element"
    
  • 如果要在循环中附加到数组,则使用

    list+=("new_element")
    
  • 不建议使用大写变量名称,因为它们更可能与环境变量冲突(参见POSIX spec,第4段)

1 事实上,在我的机器上,它需要将近6分钟 - 支撑扩展需要不到0.1秒!