2014-12-27 6 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 

Что-то о, если цикл не удается, ив пробовал много вариаций на него, но не смогли найти тот, который работает. В настоящий момент результат никогда не соответствует ошибке. Когда я запускаю завиток только из командной строки, он выдает ошибку, которую я установил в $err, если файл не существует, но при запуске скрипта ветвь else выбирается каждый раз, когда говорит, что файл существует. Я даже пытался установить ошибку *"19"*, и она все равно не соответствует. Я потратил много времени на поиски и тестирование, но не повезло, поэтому я бы оценил любую помощь, которую можно было бы дать.

Благодаря

+0

серьезно использовать Wget вместо завитка, Wget возвращает состояние ошибки (в $?), Если он выходит из строя. – Jasen

+0

ваши эхо-операторы должны иметь $ f внутри кавычек, просто в случае, когда имя файла начинается с '-e' или '-n' и т. Д. ... в общем случае $ $, используемое где-либо вне кавычек, является приглашением для оболочки инъекции. – Jasen

+0

@ Jasen Цитаты не помогут самим аргументам. 'echo '-n" foo' по-прежнему рассматривает '-n' как аргумент. Это помогает, если переменная является «-n something», хотя, избегая расщепления слов. –

ответ

2

() получит вам возвращаемое значение $() поможет вам стандартный вывод

result=$(curl ftp://$ftpaddress$ftplocation$f --user $ftpusername:$ftppassword --head 2>&1) 
Смежные вопросы