Bash脚本中使用exiftool变量编写if语句报错问题
问题分析与修复方案
第一个报错的原因与解决
你当前的脚本存在三个核心问题:
- 变量存储错误:
ExifCommand="exiftool ..."只是把命令文本存在变量里,没有执行命令获取版本号,导致if判断时在拿命令本身做匹配,而非实际版本值。 - 正则语法错误:bash的
=~使用标准正则语法,*是量词不能单独作为开头,匹配包含3.7的字符串应该用.*3.7.*。 - 解释器不兼容:用
sh testing.sh运行脚本时,会调用POSIX shell(如dash),而=~是bash专属的正则匹配运算符,POSIX shell不支持该语法。
修复后的脚本(需用bash运行,不要用sh):
#!/bin/bash # 用命令替换执行exiftool,-s参数让工具只输出版本号值 ExifVersion=$(exiftool -s -ProductVersion /serverdata/serverfiles/test/Server.exe) # 用bash的[[ ]]做正则匹配,比[ ]更稳定可靠 if [[ $ExifVersion =~ .*3.7.* ]]; then echo "testing success" fi
第二个报错的原因与解决
你用ExifCommand=$(exiftool -ProductVersion ...)时报错Product: not found,是因为exiftool默认输出格式为ProductVersion : 3.7.x,当变量未加引号引用时,shell会把ProductVersion当成独立命令去执行,从而触发错误。
解决方法很简单:给exiftool加上-s参数,让它只输出纯版本号,不再带标签前缀:
ExifVersion=$(exiftool -s -ProductVersion /serverdata/serverfiles/test/Server.exe)
注意事项
运行脚本时,不要用sh testing.sh,直接给脚本添加执行权限后运行./testing.sh,或者用bash testing.sh,这样才能触发脚本开头#!/bin/bash指定的bash解释器。
内容的提问来源于stack exchange,提问作者Stultusaur
相关产品推荐
相关产品推荐

