1

file を使用してファイルの種類を確認しようとしており、カット コマンドを使用して私の場合は JPEG などの種類のみを取得し、それを使用してファイルが目的の種類であるかどうかを確認しています。ただし、シェルでこれを実行するたびに、pic1.jpg: Unexpected Operator が吐き出されます。問題がどこにあるのかわからず、しばらくの間私を悩ませてきました。

!#/bin/sh

file=$(file -F " " $1)

if [ $file = ERROR: ] || [ $file = empty ] then
    echo "$1 is not a valid jpeg file." >&2 >> error.log
else
    extension=$(file -F " " $1 | cut -f 3 -d " ")
4

1 に答える 1

0

ステートメント$fileでは二重引用符で囲む必要があることに注意してください。ifそうしないと、 の内容が$fileシェルによってコマンドとして解釈されます。これは、知っておくべきシェルコーディングの主な落とし穴の 1 つです。

さらに、ステートメントとステートメントの;間が欠落しています。コマンドと同じであることに注意してください。それに対する最後の引数にすぎません。「通常の言語」で期待されるような「単なるブラケット」ではありません:)。したがって、同じ行に 2 つの式がある場合は、区切り文字で区切る必要があります。]then[ ... ]test];

にいくつかの機能強化を提案することはできますが、エラーを指摘するために、私の例をあなたのものと同じように保ちました. 次のコードが機能します。

#!/bin/sh

file=$(file -F " " $1)

if [ "$file" = "ERROR:" ] ||  [ "$file" = "empty" ] ; then
    echo "$1 is not a valid jpeg file." 1>&2 >> error.log
else
    extension=$(file -F " " $1 | cut -f 3 -d " ")
fi

echo "$extension"

二重引用符がないと、スクリプトは次の if ステートメントになることに注意してください。

if [ test.sh  POSIX shell script, ASCII text executable = Error: ] || [ test.sh  POSIX shell script, ASCII text executable = empty ] 
于 2013-01-29T22:39:34.857 に答える