我正在编写一个下载一堆文件的脚本,我正在使用 wget 下载文件,并且我想根据 3 种情况将每个文件的自定义状态消息回显到终端:
- 文件下载成功(HTTP/1.1 200 OK)
- 文件与本地文件相比没有变化(HTTP/1.1 304 未修改)
- 其余情况均视为下载失败
我能够获取状态代码并使用 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