私はしばらく前に次のスクリプトを書いています。
#!/bin/bash
#Default number of IPs
NUM_IPS=48
if [ "$1" != "" ]; then
NUM_IPS=$1
fi
#Example of IPv6 supplied 2001:41d0:0303:6e1b::/64
read -p "Starting IPv6 : " IPv6
IPv6_c=$(echo $IPv6 | sed -e 's/\/64//g' | sed -e 's/:*$//g')
IPv6_e=$(sed -e 's#.*:\(\)#\1#' <<< "$IPv6_c")
IPv6_s=$(echo $IPv6_c | sed -e "s/$IPv6_e//g")
IPv6_t1=$(echo $IPv6 | sed -e 's/\/64//g')
IPv6_t2=$(echo $IPv6_t1 | sed -e "s/$IPv6_c//g")
IPv6_t3=$IPv6_t2"/64"
for i in $(seq 0 $((NUM_IPS-1))); do
printf "$IPv6_s%.4x$IPv6_t3\n" $((i+0x$IPv6_e))
done
しかし、この小さなスクリプトは結果を印刷するだけです。これで、生成されたIPv6のリストを配列に入れてさらに処理したいと思います。どうすればいいですか?
事前にありがとう
PS。 IPv6形式を指定するより良い方法がある場合は、自由に共有してください。 ;)
編集する:
ipv6変数の結果の例:
Starting IPv6 : 2001:41d0:0303:6e1b::/64
IPv6_c......: 2001:41d0:0303:6e1b
IPv6_e......: 6e1b
IPv6_s......: 2001:41d0:0303:
IPv6_t1.....: 2001:41d0:0303:6e1b::
IPv6_t2.....: ::
IPv6_t3.....: ::/64
答え1
これは私にとって効果的な結果です。
#!/bin/bash
Generate_IPv6(){
#Variables
if [ "$1" != "" ]; then
NUM_IPS=$1
else
NUM_IPS=48
fi
if [ "$2" != "" ]; then
IPv6=$2
else
read -p "Starting IPv6 : " IPv6
fi
IPv6_c=$(echo $IPv6 | sed -e 's/\/64//g' | sed -e 's/:*$//g')
IPv6_e=$(sed -e 's#.*:\(\)#\1#' <<< "$IPv6_c")
IPv6_s=$(echo $IPv6_c | sed -e "s/$IPv6_e//g")
IPv6_t1=$(echo $IPv6 | sed -e 's/\/64//g')
IPv6_t2=$(echo $IPv6_t1 | sed -e "s/$IPv6_c//g")
IPv6_t3=$IPv6_t2"/64"
for i in $(seq 0 $((NUM_IPS-1))); do
IPv6_RR+="$(printf "$IPv6_s%.4x$IPv6_t3\n" $((i+0x$IPv6_e))) "
done
IFS=' ' read -r -a IPv6_ARR <<< "$IPv6_RR[0]"
}
Generate_IPv6 "$1" "$2"
既定では、IPv6_RR+="$(printf "$IPv6_s%.4x$IPv6_t3\n" $((i+0x$IPv6_e))) "
スペースで区切られたリストを作成し、配列を作成しIFS=' ' read -r -a IPv6_ARR <<< "$IPv6_RR[0]"
ます。