syntax error near unexpected token `if'

4

我目前正在尝试编写一个bash脚本,帮助我遍历一个目录并检查文件的.jpeg或.jpg扩展名。我想到了以下内容:

#declare $PICPATH, etc...

for file in $PICPATH
    if [ ${file -5} == ".jpeg" -o ${file -4} == ".jpg" ];
    then
        #do some exif related stuff here.
    else
        #throw some errors
    fi
done

执行时,Bash 在 if 行上一直抛出错误:"语法错误,附近出现意外的标记 `if'。

我完全不懂脚本编写;我的 if 语句有什么问题吗?

谢谢。


要删除变量的最后5个字符,请使用${file::-5}${file -5}不起作用。 - Veda
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
12

我认为你只是漏掉了 for 循环的 do 子句:

#declare $PICPATH, etc...

for file in $PICPATH; do
    if [ ${file -5} == ".jpeg" -o ${file -4} == ".jpg" ];
    then
        #do some exif related stuff here.
    else
        #throw some errors
    fi
done

我简直不敢相信我错过了那个。我花了一个小时来试图弄清楚出了什么问题。非常感谢。 - el HO
如果你喜欢的话,可以将 do 放在新行上。然后,在它之前可以省略分号 ;。同样适用于 if 后面的 then - emi

2
${file -5}

这是一个语法错误。也许你的意思是

${file#*.}

无论如何,最好执行以下操作:

for file in $PICPATH; do
    image_type="$(file -i "$file" | awk '{print gensub(";", "", $2)}')"
    case $image_type in
        image/jpeg)
            # do something with jpg "$file"
        ;;
        image/png)
            # do something with png "$file"
        ;;
        *)
            echo >&2 "not implemented $image_type type "
            exit 1
        ;;
    esac
done
如果您只想处理jpg文件,请执行以下操作:
for file in $PICPATH; do
    image_type="$(file -i "$file" | awk '{print gensub(";", "", $2)}')"
    if [[ $image_type == image/jpeg ]]; then
            # do something with jpg "$file"
    fi
done

非常感谢你提供的改进版,但我只需要关于 JPEG 的内容:其他的都可以忽略。无论如何,还是非常感谢你的回复。 - el HO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,