CODE:
#!/bin/sh
expend_ipv6_addr()
{
local ADDR=${1%%/*}
# get number of :
local NEW_STR=$(echo $ADDR | sed 's/:://g' | sed 's/[a-f0-9]//ig')
local PAD_STR=`str_pad $((7 - ${#NEW_STR})) :`
local TMP_STR=`echo $ADDR | sed 's/::/'$PAD_STR'/g'`
local ADDR1=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 1)`
local ADDR2=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 2)`
local ADDR3=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 3)`
local ADDR4=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 4)`
local ADDR5=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 5)`
local ADDR6=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 6)`
local ADDR7=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 7)`
local ADDR8=`str_pad 4 0 $(echo $TMP_STR | cut -d ':' -f 8)`
local NEW_ADDR=`echo "$ADDR1:$ADDR2:$ADDR3:$ADDR4:$ADDR5:$ADDR6:$ADDR7:$ADDR8" | tr 'a-z' 'A-Z'`
echo $NEW_ADDR
}
str_pad()
# str_pad len PAD_C str
{
local I=0
local PAD_STR=""
for ((I=0; I<$(($1 - ${#3})); I++)) {
PAD_STR="${2}$PAD_STR"
}
echo "${PAD_STR}${3}"
}
PREFIX_LEN=`echo $1 | awk -F/ '{print $2}'`
if [ -z "$PREFIX_LEN" ]
then
PREFIX_LEN=128
fi
echo "Org Address: $1"
echo "New Address: $(expend_ipv6_addr $1)/$PREFIX_LEN"运行结果:$ ./test.sh 10::1
Org Address: 10::1
New Address: 0010:0000:0000:0000:0000:0000:0000:0001/128