A ideia parece certa para mim. Usando while :; do ...
, você pode torná-lo portátil para os shells normais de Bourne. As chamadas expr
parecem desnecessárias. Além disso, você provavelmente desejará sair do loop quando o host for encontrado.
while :; do
if ping -c 1 $1; then
notify-send "$1 back online"
break
fi
sleep 30s
done