我想检查服务器中文件的内容类型。 以下代码总是回响"图像大小无效"。
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" = "" ]
答案 0 :(得分:1)
而不是grep
和IFS
,set
等,您可以使用一个awk
来提取Content-Type
标题:
type=$(curl -sI "$IMAGE_LINK" | awk -F ': ' '$1 == "Content-Type" { print $2 }')
if [[ $type == *"image/gif"* ]]
then
echo "image size is valid"
exit 0
else
echo "image size is invalid"
exit 1
fi
答案 1 :(得分:1)
比较不起作用,因为$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 :(得分:1)
只需使用curl和-w option即可完成Content-Type:
标题的提取,就像在这个shell脚本中一样:
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