0

我使用以下 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
4

1 回答 1

1

根据您的代码和从 linux shell 中的“ftp”命令获取退出状态代码中的代码进行调整,我做了这个:

#!/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
于 2013-10-23T11:44:29.653 回答