Bash 如何在shell中使用curl检查内容类型
我想检查服务器中文件的内容类型。 以下代码始终回显图像大小无效Bash 如何在shell中使用curl检查内容类型,bash,shell,http,curl,Bash,Shell,Http,Curl,我想检查服务器中文件的内容类型。 以下代码始终回显图像大小无效 TYPE=$(curl -sI $IMAGE_LINK | grep Content-Type) IFS=" " set $TYPE echo $2 if [ $2 == "image/gif" ] then echo "image size is valid" exit 0 else echo "image size i
TYPE=$(curl -sI $IMAGE_LINK | grep Content-Type)
IFS=" "
set $TYPE
echo $2
if [ $2 == "image/gif" ]
then
echo "image size is valid"
exit 0
else
echo "image size is invalid"
exit 1
fi
这是输出。为什么$2为image/gif时比较不起作用
image/gif
image size is invalid
另外,,
这是我不想要的解决方案
TYPE=$(curl -sI $IMAGE_LINK | grep "Content-Type: image/gif")
echo $TYPE
if [ ! "$TYPE" = "" ]
您可以使用单个awk来提取内容类型标题,而不是grep和IFS、set等:
您可以使用单个awk来提取内容类型标题,而不是grep和IFS、set等:
这个比较不起作用,因为在$2结尾有一个拖尾回车。如果执行此操作,您可以看到它:
TYPE=$(curl -sI $IMAGE_LINK | grep Content-Type)
IFS=" "
set $TYPE
echo -n "$2" | od -t c
这将产生:
0000000 i m a g e / g i f \r
0000012
此外,由于默认的IFS设置中包含空间,因此设置IFS并没有真正帮助您。您可以将IFS设置为包含回车IFS=$'\r',或者使用另一种方法解析出所需的位:
TYPE=$(curl -sI "$IMAGE_LINK" | grep Content-Type | tr -d '\r' | cut -f 2 -d ' ')
if [ "$TYPE" = "image/gif" ]
then
echo 'It works!'
fi
或者,正如@DanielStenberg所建议的,甚至更好:
TYPE=$(curl -sI "$IMAGE_LINK" -w '%{content_type}' -o /dev/null)
if [ "$TYPE" = "image/gif" ]
then
echo 'It works!'
fi
这个比较不起作用,因为在$2结尾有一个拖尾回车。如果执行此操作,您可以看到它:
TYPE=$(curl -sI $IMAGE_LINK | grep Content-Type)
IFS=" "
set $TYPE
echo -n "$2" | od -t c
这将产生:
0000000 i m a g e / g i f \r
0000012
此外,由于默认的IFS设置中包含空间,因此设置IFS并没有真正帮助您。您可以将IFS设置为包含回车IFS=$'\r',或者使用另一种方法解析出所需的位:
TYPE=$(curl -sI "$IMAGE_LINK" | grep Content-Type | tr -d '\r' | cut -f 2 -d ' ')
if [ "$TYPE" = "image/gif" ]
then
echo 'It works!'
fi
或者,正如@DanielStenberg所建议的,甚至更好:
TYPE=$(curl -sI "$IMAGE_LINK" -w '%{content_type}' -o /dev/null)
if [ "$TYPE" = "image/gif" ]
then
echo 'It works!'
fi
提取Content-Type:header只需使用curl和
type=$(curl -sI "$IMAGE_LINK" -o/dev/null -w '%{content_type}\n')
if [ "$type" = "image/gif" ]
then
echo "image type is valid"
exit 0
else
echo "image type is invalid"
exit 1
fi
提取Content-Type:header只需使用curl和
type=$(curl -sI "$IMAGE_LINK" -o/dev/null -w '%{content_type}\n')
if [ "$type" = "image/gif" ]
then
echo "image type is valid"
exit 0
else
echo "image type is invalid"
exit 1
fi
在GNU grep上以PCRE模式使用grep作为grep-Po'?在GNU grep上以PCRE模式使用grep作为grep-Po'-也可以不使用awk进行检查。标题字段名称检查必须不区分大小写:type=$curl-sI$IMAGE\u LINK-w'{content\u type}\n'-o/dev/nullExcellent@DanielStenberg,您可以将其添加为答案。@DanielStenberg不知道curl有这个选项!很高兴知道!也可以在没有awk的情况下执行此操作。标头字段名称检查必须不区分大小写:type=$curl-sI$IMAGE\u LINK-w“{content\u type}\n'-o/dev/nullExcellent@DanielStenberg,您可以将其添加为答案。@DanielStenberg不知道curl有此选项!很高兴知道!