我有一个KornShell (ksh)脚本,它可以写出FTP脚本并执行,以便从windows服务器获取一些文件到UNIX。
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(Solaris10)上不起作用。
有没有人可以展示简单的错误处理示例,可以工作或如何做?日志文件解析也被考虑在内,但是有没有其他内置的方法呢?其他FTP机制不在讨论范围之内。我们使用的是普通的老式FTP。
发布于 2011-01-11 13:05:11
感谢您的回复。我正在使用下面的方法来使它工作。
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再次感谢。希望这对任何面临类似困难的人都有所帮助。
发布于 2011-01-10 21:34:16
我不认为阅读$?都会起作用的。您只需从执行的子subshell中获取值(使用!命令)。
我建议您可以查看expect:http://expect.sourceforge.net/,它是免费的,可能可以在您的Linux发行版的存储库中找到。
在网页上:
Expect是一款自动化交互式应用程序的工具,如远程登录、ftp、密码、fsck、rlogin、tip等。
https://stackoverflow.com/questions/4647094
复制相似问题