我正在尝试使用文件检查文件的类型,然后使用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 " ")
答案 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 ]