2014-12-27 133 views
0

我正在使用bash脚本来检查ftp站点以查看是否存在一些文件。它通过使用curl遍历一系列文件来检查文件是否存在于ftp服务器上。如果它没有,然后curl应该输出一个错误,即时通讯在我的if循环寻找并回应基于它的结果。下面的代码:bash如果声明失败

#!/bin/bash 

# script variables 
ftpaddress=ftpaddress 
ftplocation=folderlocation 
ftpusername=ftpusername 
ftppassword=ftppassword 
err="curl: (19) Given file does not exist" 

# Initialise array of files 
files=("file1.xml" "file2.xml" "zy.xml") 

for f in "${files[@]}"; do 
    result=(curl ftp://$ftpaddress$ftplocation$f --user $ftpusername:$ftppassword --head) 
    if [[ "$result" == "$err" ]]; then 
      echo $f " Does not exist!!!!" 
    else 
      echo $f "Exists" 
    fi 
done 

讲讲如果循环失败,香港专业教育学院尝试了很多关于它的变化,但一直无法找到一个工作。目前结果永远不匹配错误。当我从命令行运行curl时,如果文件不存在,但是运行脚本时会输出我设置为$err的错误,但每次都选择else分支表示文件确实存在。我甚至尝试将错误设置为*"19"*,但它仍然不匹配。我花了很多时间查找并测试它,但没有运气,所以不会感激任何帮助。

感谢

+0

严重,而不是使用卷曲的wget,wget的返回一个错误状态($?),如果它失败。 – Jasen

+0

你的echo语句应该在引号内有$ f,以防万一文件名以'-e'或'-n'等开头......一般在引号之外的任何地方使用“$”就是一个shell的邀请注射攻击。 – Jasen

+0

@Jasen行情不会自动帮助争论。 'echo“-n”foo“仍将'-n'作为参数。如果变量是'-n something',但通过避免分词,它确实有帮助。 –

回答

2

()将让你的返回值$()将让你stdout的

result=$(curl ftp://$ftpaddress$ftplocation$f --user $ftpusername:$ftppassword --head 2>&1)