2017-06-05 90 views
2

我想写一个代码来检查一个特定的日期文件,如果它存在,它会把它到我的本地主路径,如果它不存在,那么将检索其他文件不同的日期。unix ftp脚本中的条件

#!/bin/ksh 

FILE1="CAS_20170604.txt" 
FILE2="CAS_20170603.txt" 

/usr/bin/ftp -n 93.45.148.9 << EOF 
    user usr passwd 
    cd "/abc/def" 
    bin 
    get $FILE1 

if [ ! -f $FILE1 ]; 
then 
    cd "/abc/def" 
    bin 
    get $FILE2 
fi 
    bye 
    !EOF! 

虽然在执行该脚本,我得到两个文件,这是不需要的,下面的错误:

?Invalid command 
?Invalid command 

请有人可以帮助我在这里。

+0

你有任何命令行客户喜欢'wget','curl','fetch'?而不是直接使用脚本来使用'ftp'客户端,在我看来,使用可以提供shell脚本可以解释的返回代码的东西来创建FTP协议请求会更容易。如果您认为这可能是一种选择,那么很高兴在答案中展示。 – ghoti

回答

2

您不能在ftp脚本中使用shell命令。

你必须拆分脚本分为两个:

/usr/bin/ftp -n 93.45.148.9 << EOF 
user usr passwd 
cd "/abc/def" 
bin 
get $FILE1 
bye 
!EOF! 

if [ ! -f $FILE1 ]; 
then 
    /usr/bin/ftp -n 93.45.148.9 << EOF 
    user usr passwd 
    cd "/abc/def" 
    bin 
    get $FILE2 
    bye 
    !EOF! 
fi 
+1

感谢:-)它的工作,另外我已经使用重定向,同时做第一个FTP,以防止输出“无法打开文件”显示在屏幕上,以防当前日期的文件没有找到。例如:/ usr/bin/ftp -n 93.179.136.9 << !EOF! >/dev/null 2>&1 – User123