将文件送入切割时意外的操作员

时间:2013-01-29 22:24:39

标签: linux shell ubuntu

我正在尝试使用文件检查文件的类型,然后使用cut命令在我的情况下仅获取JPEG等类型,然后使用它来检查文件是否是所需的类型。但是每当我在Shell中运行它时,它会吐出pic1.jpg:意外的操作员。我不确定问题出在哪里,现在已经让我难以置信了。

!#/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 " ")

1 个答案:

答案 0 :(得分:0)

请注意,您必须在$file语句中将if括在双引号中。否则,$file的内容将被shell解释为命令。这是你应该注意的shell编码的主要缺陷之一。

此外,您还错过了;]语句之间的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 ]