IPv6 목록을 배열로 생성

IPv6 목록을 배열로 생성

나는 얼마 전에 다음과 같은 스크립트를 작성했습니다.

#!/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 목록을 배열에 넣어 추가로 처리하려고 합니다. 어떻게 해야 합니까?

미리 감사드립니다

추신. 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]"배열을 만듭니다.

관련 정보