2011-01-10 65 views
0

我有一个KornShell(ksh)脚本,写出FTP脚本并执行从Windows服务器到UNIX的一些文件。FTP错误处理

echo "user <username> <pwd>" >ftpin.out 
echo "bin">>ftpin.out 
echo "get file.txt" >>ftpin.out 
echo "get file2.txt" >>ftpin.out 
echo "!echo $?">>ftpin.out 
echo"bye">>ftpin.out 

ftp -n -i servername <ftpin.out 
echo $? 

在这里,我不能检查文件是否存在源Windows系统上或不。由于这种通常的错误处理不起作用,$?当有任何文件存在,其他文件不存在时总是为0。我甚至尝试检查ERRORLEVEL,但这在UNIX(Solaris 10)上不起作用。

任何人都可以显示简单的错误处理样本的这个工作或如何做到这一点?日志文件解析也被考虑在内,但还有其他内置方法吗?其他FTP机制超出范围。我们正在使用普通的旧FTP。

+0

停止使用ftp并切换到wget,curl或lftp。 – 2011-01-10 13:49:14

+0

对不起......我目前的组织不希望这样。我无能为力。 – 2011-01-10 13:58:37

回答

0

感谢的工具。我正在使用下面的方法使其工作。

echo "user <username> <pwd>" >ftpin.out 
echo "bin">>ftpin.out 
echo "get file.txt" >>ftpin.out 
echo "! [ ! -f file.txt ] && ksh alertme.sh" >>ftpin.out 
echo "get file2.txt" >>ftpin.out 
echo "! [ ! -f file2.txt ] && ksh alertme.sh" >>ftpin.out 
echo"bye">>ftpin.out 

ftp -n -i servername <ftpin.out 

通过上述方法,如果FTP无法复制一个文件,如果文件不存在于源服务器的话,我会打电话给alertme.sh脚本寄给我的错误信息。 这样我甚至可以用它来覆盖ftpin.out本身来停止ftp下一个文件的获取。我将为此测试下面的一个。

echo "! [ ! -f file.txt ] && echo bye>>ftpin.out" >>ftpin.out 

再次感谢。希望这有助于任何身体面临类似的困难。

1

我不认为读$?将工作。您只需从执行的子shell中获取值(使用!命令)。

我建议你可以看看expect:http://expect.sourceforge.net/ 它是免费的,可能在你的Linux发行版的仓库中可用。

从网页:

期待是自动化的交互式应用程序如telnet,f​​tp,passwd文件时,fsck,远程登录,提示等您的答复

+0

感谢您的回复。但正如我所提到的,我目前仅限于使用ftp本身,而没有任何在当前环境中安装任何工具的机会。 – 2011-01-10 13:50:19