Eu encontrei a base para este elegante loop em outro lugar no serverfault. Acontece que não há necessidade de salvar o código de saída, como você pode testar diretamente no comando em si;
until ncftpput -DD -z -u user -p password remoteserver /remote/dir /local/file; do
echo Tansfer disrupted, retrying in 10 seconds...
sleep 10
done