如何在 if else 语句中使用 wget http 状态代码来根据状态代码采取行动

如何在 if else 语句中使用 wget http 状态代码来根据状态代码采取行动

我正在编写一个下载一堆文件的脚本,我正在使用 wget 下载文件,并且我想根据 3 种情况将每个文件的自定义状态消息回显到终端:

  1. 文件下载成功(HTTP/1.1 200 OK)
  2. 文件与本地文件相比没有变化(HTTP/1.1 304 未修改)
  3. 其余情况均视为下载失败

我能够获取状态代码并使用 awk 仅隔离状态代码号(200、304 等),我可以使用以下内容提取 HTTP 状态:

#!/bin/bash
wget -NS http://ipv4.download.thinkbroadband.com/5MB.zip 2>&1 | grep "HTTP/" | awk '{print $2}'

if [ $? = 200 ]; then
echo "File downloaded
"
if [ $? = 304 ]; then
echo "File not modified from local copy"
else
    echo "Something went wrong"
    exit 1
fi

但这只是将 http 状态代码打印回终端,并始终返回最后的 else 语句。

笔记本电脑:〜$ ./test.sh
304
出现错误

我如何发送输出以通过 if else 语句运行?

答案1

您正在将 HTTP 状态代码打印到标准输出,但您的代码会比较来自 的返回代码wget,而不是打印到标准输出的值。如果没有错误,则wget返回0

答案2

您的脚本需要捕获第一个命令的输出。可能有更优雅的方法,但基本形式是:

wget_result="$(wget -NS http://ipv4.download.thinkbroadband.com/5MB.zip 2>&1|grep "HTTP/"|awk '{print $2}')"

if [ $wget_result = 200 ]; then
echo "File downloaded
"
if [ $wget_result = 304 ]; then
echo "File not modified from local copy"
else
    echo "Something went wrong"
    exit 1
fi

相关内容