Descobri isso ... Apenas tive que usar o sinalizador -c para contar as correspondências no grep, -q para mantê-lo limpo e silencioso, sair do loop for e certificar-se de que não houve correspondências.
installs_dir="/my/dir"
while read -e -p "Service Port: " -i "" service_port; do
s=0
for each_install in "${installs_dir}/"*; do
while grep -cq Port=${service_port} ${each_install}/main.cfg; do
let "s++"
break
done
done
[ ${s} != 0 ] && printf "A server is already assigned to that port, try again.\n"
[ ${s} == 0 ] && printf "Port assigned.\n" && break
done