Я работаю над скриптом 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"*
, и она все равно не соответствует. Я потратил много времени на поиски и тестирование, но не повезло, поэтому я бы оценил любую помощь, которую можно было бы дать.
Благодаря
серьезно использовать Wget вместо завитка, Wget возвращает состояние ошибки (в $?), Если он выходит из строя. – Jasen
ваши эхо-операторы должны иметь $ f внутри кавычек, просто в случае, когда имя файла начинается с '-e' или '-n' и т. Д. ... в общем случае $ $, используемое где-либо вне кавычек, является приглашением для оболочки инъекции. – Jasen
@ Jasen Цитаты не помогут самим аргументам. 'echo '-n" foo' по-прежнему рассматривает '-n' как аргумент. Это помогает, если переменная является «-n something», хотя, избегая расщепления слов. –