#!/bin/bash # Step 0: Make sure we have an argument if [ -z "$1" ]; then echo "Usage: $0 (input string being last two blocks of ip6, e.g. fe36:d00f)" exit 1 fi input=$1 # Step 1: Split the input string at ":" IFS=':' read -r part1 part2 <<< "$input" # Step 2: Pad each of the two fields to 4 characters by adding leading zeros part1=$(printf '%04x' 0x$part1) part2=$(printf '%04x' 0x$part2) # Step 3: Split each of the four-digit numbers into two digit numbers # e.g., 4f33 becomes 4f and 33 part1a=${part1:0:2} part1b=${part1:2:2} part2a=${part2:0:2} part2b=${part2:2:2} # Step 4: Translate each hexadecimal two-digit number into decimal decimal1a=$(printf '%d' 0x$part1a) decimal1b=$(printf '%d' 0x$part1b) decimal2a=$(printf '%d' 0x$part2a) decimal2b=$(printf '%d' 0x$part2b) # Step 5: Concat all numbers with a point '.' result="$decimal1a.$decimal1b.$decimal2a.$decimal2b" # Output the result echo "$result"