gpt4 book ai didi

linux - 将文件通过管道传输到剪辑时出现意外的运算符(operator)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:32 25 4
gpt4 key购买 nike

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

最佳答案

请注意,您必须在 if 语句中用双引号将 $file 括起来。否则 $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 ] 

关于linux - 将文件通过管道传输到剪辑时出现意外的运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com