Witamy Pana
1. W shell_quote ma Pan literówkę, powinno być
printf "'%s'" "${string//\'/\'\\\'\'}"
2. ipv4 i ipv6 lepiej poprawić na poniższy, bo może u Pana powstać błąd nounset
if [[ -n ${ipv4} && -n ${ipv6} ]]; then
3. Całość ogólnie nieźle.
Pozdrawiamy