1

我正在尝试使用文件检查文件的类型,然后在我的情况下使用 cut 命令仅获取 JPEG 等类型,然后使用它来检查文件是否是所需的类型。但是,每当我在 Shell 中运行它时,它都会吐出 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否则,$fileshell 会将 的内容解释为命令。这是您应该注意的 shell 编码的主要缺陷之一。

此外,您还缺少 the ;between the]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 回答