用于检查文件是否为Unix可执行文件类型的Shell脚本

时间:2012-07-31 18:14:08

标签: linux shell

我正在编写一个Shell脚本,用户将把路径传递给JAVA_HOME作为参数。我想检查JAVA_HOME路径是否有效。那么如何检查传递的输入路径是否是exe文件(Unix可执行文件)?假设用户是否传递/ usr / bin / java - 如果用户传递了/usr/bin/test.txt(某些文本文件),那么它是有效的 - 这是无效的。那么如何检查文件是否为Unix可执行文件类型?

我尝试使用-x,猜测这不是礼仪检查,因为它也会为/ usr / bin返回true !!!

3 个答案:

答案 0 :(得分:5)

最简单的方法是使用file命令。

$ file /usr/bin
/usr/bin: directory
$ file /usr/bin/java
/usr/bin/java: Mach-O universal binary with 2 architectures
/usr/bin/java (for architecture x86_64):    Mach-O 64-bit executable x86_64
/usr/bin/java (for architecture i386):  Mach-O executable i386
$ 

您可以将file的输出格式化为合适的字符串,例如“可执行”。

答案 1 :(得分:0)

Unix“可执行文件”是指具有execute属性集的任何内容。您不能依赖于此,因为您可以在pdf文档上设置执行权限,例如。

相反,也许您应该用来检测文件类型的是file命令。例如,它会告诉您文件是二进制文本还是纯文本。

答案 2 :(得分:0)

测试的手册页很清楚,只有-x不会这样做

  

-x file如果文件存在且可执行,则为True。 True表示只执行                      国旗是。如果file是目录,则true表示可以搜索文件。

但是,如果将其与-f-r

结合使用
  

-f file如果文件存在且为常规文件,则为真。

     

-r file如果文件存在且可读,则为真。

您将知道该文件是否具有必需的属性是可执行文件。


用户可能已经在非可执行文件上设置了这些属性,但这显然是用户错误。


此处的摘录摘自Mac OS 10.5版本。在其他系统(特别是Linux)上,您可能看起来略有不同。