2017-09-27 11 views
1

サーバのファイルのコンテンツタイプをチェックしたいと思います。 次のコードは、常に「画像サイズが無効です」とエコーします。シェルでカールを使用してコンテンツタイプをチェックする方法

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

使用 'PCREモードでgrep' .. | grep -Po '(?<=コンテンツタイプ:)[^;] *' '。それをバックアップせずに 'IFS'を操作しないでください。デフォルトでは値は単一の空白です。 – Inian

答えて

1

代わりgrepIFSsetなどの、あなたはContent-Typeヘッダを抽出するために単一awkを使用することができます。

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 
+0

私はそれを試していただきありがとうございます。 –

+4

これはawkなしでも可能です(ヘッダーフィールド名のチェックでは大文字と小文字を区別する必要があります): 'type = $(curl -sI" $ IMAGE_LINK "-w '%{content_type} \ n' -o/dev/null)' –

+0

優れた@DanielStenberg、答えとして追加することができます。 – anubhava

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は本当にここであなたを助けていない設定します。 (@DanielStenbergにより示唆されるように)

TYPE=$(curl -sI "$IMAGE_LINK" | grep Content-Type | tr -d '\r' | cut -f 2 -d ' ') 
if [ "$TYPE" = "image/gif" ] 
then 
    echo 'It works!' 
fi 

または、さらに良い:あなたは、キャリッジリターン(IFS=$' \r')を含み、またはあなたが必要とするビットを解析するために別の方法を使用するようにIFSを設定することができ

TYPE=$(curl -sI "$IMAGE_LINK" -w '%{content_type}' -o /dev/null) 
if [ "$TYPE" = "image/gif" ] 
then 
    echo 'It works!' 
fi 
1
Content-Type:ヘッダを抽出

このシェルスクリプトのように、ちょうどカールと-w optionで行うことができます: `として(GNU` grep`上)

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 
関連する問題