Como a maioria dos programas, o rsync retorna um status diferente de zero se ocorrer um erro. Como você tem set -e no topo do script, seu script sairá com um status diferente de zero se o rsync for.
Se você quiser fazer alguma recuperação se o rsync falhar, você poderá continuar e analisar o status. Com set -e , você precisa colocar o comando rsync em uma condição para que o script não saia.
failures=0
…
if rsync …; then
echo "rsync succeeded"
else
echo "rsync failed"
failures=$((failures+1))
fi
…
if ((failures != 0)); then exit 1; fi
Se você quiser analisar o código de status, um idioma comum é status=0; rsync … || status=$? : esse comando sempre retorna um status de sucesso, pois o comando no lado direito do operador || sempre é bem-sucedido e status ser definido para o status do comando rsync.
status=0
rsync … || status=$?
if ((status != 0)); then
…
fi