Shell脚本生成下一百个ip地址

时间:2015-05-31 10:33:57

标签: linux bash shell unix

如果我的IP地址为192.168.1.2,我需要生成接下来的100个IP,以便不断添加到基本ip。

我尝试执行echo 192.168.1.{2..102}这很好用但是我需要一个通用代码,它可以使用Shell脚本生成使用基本IP地址指定的尽可能多的IP地址。

4 个答案:

答案 0 :(得分:1)

您可以使用for来遍历命令seq创建的列表。然后,只需将seq中的数字修改为第一个和最后一个数字

#!/bin/bash

START=0
END=100

for I in $(seq $START $END)
do
    echo "192.168.0.$I"
done

答案 1 :(得分:0)

类似的东西:

#!/bin/bash

i=1
while (( i <= 100 ))
do
        echo "x.y.z.$i"
        i=$((i + 1))
done

答案 2 :(得分:0)

如果我需要更改到第二个八位字节,那么我应该能够改变。 例如。 SuperTable。我需要为X和Y生成ip

如果我需要更改三个八位字节,那么我应该可以更改。

我正在寻找解决方案。 198.168.X.Y工作正常,需要一个可以更改其他八位字节的脚本

答案 3 :(得分:0)

IP地址当然只是无符号的32位数。但是它们通常表示为十进制的字节,数字之间用点。

所以,如果你需要使用这个&#34; 点四方&#34;表示你可以把起始的一个转换回一个整数,计算出你想要的数量,并且对于你计算的每一个,将它打印成虚线四边形。

任何shell都支持算术表达式(使用按位运算符,为了方便起见,使用数组),这很简单:

#!/bin/ksh

ip="192.168.240.240"

num=100

set -A iparr $(echo $ip | sed 's/\./ /g')

nip=$((iparr[0] << 24))
nip=$((nip | iparr[1] << 16))
nip=$((nip | iparr[2] << 8))
nip=$((nip | iparr[3]))

lnip=$((nip + num))

while [ $nip -lt $lnip ]; do
    let $((nip++))
    iparr[0]=$((nip >> 24))
    iparr[1]=$(((nip >> 16) & 255))
    iparr[2]=$(((nip >> 8) & 255))
    iparr[3]=$((nip & 255))
    printf "%d.%d.%d.%d\n" ${iparr[0]} ${iparr[1]} ${iparr[2]} ${iparr[3]}
done

(虽然使用较旧的shell并不容易 - 但awkexpr都不容易对整数进行按位操作。但是,这可能是你的工具提供这些数字将接受普通整数或十六进制数字,因此您可能不需要使用虚线四元数表示法。)