如何检查文件是否与curl一起下载

时间:2016-05-28 19:04:51

标签: linux bash shell curl

我正在编写一个shell脚本,我需要从互联网上下载6个文件,在脚本中我已经完成了

curl a
curl b
curl c
and so on

它有效,但有时curl: (7) couldn't connect to host对于脚本中间的某些文件,例如,它会成功下载但错过文件b并出现上述错误并将下载文件c。我想抓住这个错误,以便我的代码能够成功下载所有文件。

5 个答案:

答案 0 :(得分:4)

您可以使用&& ...

链接它们
curl --fail a && curl --fail b && curl --fail c...

更新:正如@nwk在下面指出的那样,我们需要添加--fail以使curl在错误的http代码上失败。

答案 1 :(得分:4)

您可以使用循环:

while true; do
  curl --fail b && break
done

在下载b之前,循环不会中断。您可以将其设为重试功能,如果第一次尝试下载失败,您可以调用该功能:

retry(){
    while true; do
      curl --fail "$1" && break ||
      echo "Download failed for url: $1
            retrying..."
    done
}

然后这样做:

curl --fail a || retry a
curl --fail b || retry b
curl --fail c || retry c

如果您只想沉默错误消息,那么:

curl a 2>/dev/null
curl b 2>/dev/null
...

或者,如果您只是想检测错误,那么:

if ! curl --fail a; then
  echo "Failed"
fi

或者,一个班轮:

curl --fail a || echo Failed

如果您想在失败后退出并显示您自己的消息:

curl --fail a 2>/dev/null || { echo failed; exit 1; }

答案 2 :(得分:2)

set -e放在shell脚本的开头,然后使用curl --fail。如,

#!/bin/sh
set -e
curl --fail http://example.com/a
curl --fail http://example.com/b
curl --fail http://example.com/c

set -e将使脚本在第一个不成功的命令(退出状态≠零)中出现错误而停止。

答案 3 :(得分:0)

您可以通过查看$? shell变量来检查上一个命令的执行状态。  执行下面的命令检查最后一个命令的状态,其他0表示错误。

echo $?

curl a
if [ "$?" -gt 0 ]
then
echo "Error downloading file a. Exiting"
exit
fi 
curl b
if [ "$?" -gt 0 ]
then
echo "Error downloading file b. Exiting"
exit
fi 
...

@andlrc建议之后的简单修改形式:

if  ! curl a  ; then echo "Got error downloading a";  fi
if  ! curl b  ; then echo "Got error downloading b";  fi
if  ! curl c  ; then echo "Got error downloading c";  fi

答案 4 :(得分:0)

用于b c d中的file2get; 做     做:;     直到curl --fail $ file2get; 完成

或添加迭代器计数器以防止无限循环