shell bash脚本 - 上传一个大的tar文件,重试?

时间:2013-10-23 11:12:04

标签: linux bash shell sh

我使用以下shell脚本代码上传一个大的.tar文件。有时会发生服务器无法将域解析为ip或其他服务器不可用的情况。如果它不起作用,我不想重试一次。我怎样才能做到这一点?我在网上找不到这个东西。

ftp -inv << EOF
  open $FTP_SERVER
  user $FTP_USER $FTP_PASS
  cd $FTP_VERZEICHNIS
  mkdir ultimate_$DATE
  cd ultimate_$DATE
  mput *.tar
  quit
EOF

修改

抱歉,我对shell没有真正的经验,这看起来怎么样?

FTP_SUCCESS_MSG="226 Transfer complete"
while [fgrep "$FTP_SUCCESS_MSG" $FTPLOG]
do
FTPLOG=/temp/ftplogfile
ftp -inv <<! > $FTPLOG
  open $FTP_SERVER
  user $FTP_USER $FTP_PASS
  cd $FTP_VERZEICHNIS
  mkdir ultimate_$DATE
  cd ultimate_$DATE
  mput *.tar
  close
  quit
!
fi
exit 0
sleep 10s
else    
   echo "Upload completed"
done

1 个答案:

答案 0 :(得分:1)

根据您的代码和Getting exit status code from 'ftp' command in linux shell中的代码进行调整,我做了这个:

#!/bin/bash

FTP_SUCCESS_MSG="226 Transfer complete"
FTPLOG=/temp/ftplogfile

i=0
while [ $i -le 5 ]; do

ftp -inv <<! > $FTPLOG
  open $FTP_SERVER
  user $FTP_USER $FTP_PASS
  cd $FTP_VERZEICHNIS
  mkdir ultimate_$DATE
  cd ultimate_$DATE
  mput *.tar
  close
  quit
!

  if fgrep "$FTP_SUCCESS_MSG" $FTPLOG ;then
    i=10    #stupid way of saying: exit the "while"
  else
    sleep 5
    i=expr $i + 1     # ((i++)) not working
  fi

done