简单的bash / linux,检查PNG是否有效?

pngcheck几乎是完美的。 但是最简单的forms是, pngcheck输出一个以OK:或者ERROR:开头的行。 这意味着我必须parsing一个输出string,我宁愿只检查一个返回值。

我查看了pngcheck.c源代码,对PNG的有效性进行了彻底的检查,这是非常糟糕的 – 不仅仅是一个幻数检查。 所以目前我能做的最好的是创build一个简单的pngcheck.sh ,它调用pngcheck并分析输出string,接着exit 0exit 1

但是我想检查一下是否有一个简单的或更多的“bashonic”解决scheme。

谢谢!

当我查看pngcheck.c(PNGcheck,2007年7月7日的版本2.3.0)的源代码时,我相信它确实设置了返回码。 在main()的末尾附近:

 717 if (num_errors > 0) 718 err = (num_errors > 127)? 127 : (num_errors < 2)? 2 : num_errors; 719 else if (num_warnings > 0) 720 err = 1; ... 

num_errors是失败的文件数,num_warnings是有警告的文件数。 然后用“return err”退出

因此,所有OK的返回代码为0,仅用于警告1,而2或更高代表失败的文件数(最大127)。

这也与我在Ubuntu上安装的二进制文件的小测试一致。

 pngcheck -q /etc/profile >/dev/null; echo $? # returns 2 pngcheck -q cpu50.png >/dev/null; echo $? # returns 0 

在看源代码后,我认为你可以使用$? 在许多shell中拥有前一个命令的退出状态。 请参阅pngcheck.c中的第4684行,其中显示成功消息。 如果出现错误, global_error将不会被设置为0,并将被传递给main()并返回。 现在事情变得简单了:

 #!/usr/bin/env sh if pngcheck "$1" > /dev/null 2>&1 then echo things went ok else echo things went bad fi 

用法:

 $ ./check-png.sh /usr/share/icons/HighContrast/22x22/status/touchpad-disabled.png things went ok $ ./check-png.sh /tmp/FILE things went bad