Se você deseja aninhar para que cada servidor seja executado em cada IP (ou seja, executar 9 vezes), você pode:
for ip in $pureips; do
for server in $pureservers; do
echo "$server | $ip "
done
done
Se você quiser apenas rastrear cada item (por exemplo, executar 3 vezes, executar o primeiro ip com o primeiro servidor, o segundo com o segundo, etc), você pode usar um iterador e chamar o índice do array manualmente. Mas isso significa que também precisamos converter as strings em arrays primeiro:
read -a pureips <<< "10.3.1.111 10.3.1.112 10.3.1.114"
read -a pureservers <<< "a b c"
for ((i=0; i<=${#pureips[@]}; i++)); do
echo "${pureservers[i]} | ${pureips[i]}"
done