我正在开发一个项目,我正在构建自己的网络监视器,我遇到了一些问题。我想知道如何将IP地址转换为IP地址范围。到目前为止,这就是我所拥有的:
# figure out the raspbery pi ip address so that can figure out ip range of network
pi_ip_addr=$(ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1 }')
# figure out ip address range based on pi ip address
ip_addr_trunk=$(echo $pi_ip_addr | cut -d . -f 1-3)
# append .{1..255} to provide a ip address based on current ip address of raspberry pi
ip_addr_range=$ip_addr_trunk".{1..255}"
所以我认为这会奏效。但是,当我将此ip_addr_range变量传递给另一个bash脚本时,该脚本将ping该范围内的所有IP地址失败。它在命令行中产生的错误是:
ping: unknown host 192.168.2.{1..255}
我猜这里的问题是我追加的时候。{1..255}以某种方式将变量转换为字符串。因此,循环不能单独ping每个IP地址。任何人都可以告诉我如何成功地将所需范围附加到IP地址的第一部分。
答案 0 :(得分:3)
您需要一个数组,而不是常规参数。
ip_addr_range=( "$ip_addr_trunk".{1..255} )
for ip_addr in "${ip_addr_range[@]}"; do
ping "$ip_addr"
done