判断文件是否具有可执行权限应使用 -x 测试运算符,它仅检查当前用户对该文件的执行权限位(x位)是否被设置,不关心文件类型或内容;常用写法为 [ -x filename ] 或 [[ -x filename ]],返回0表示有权限,非0表示无权限或文件不存在。

判断文件是否具有可执行权限,核心就是用 -x 测试运算符。它不关心文件内容或类型,只检查当前用户对该文件是否有执行权限(即 `x` 位是否被设置)。
直接使用 test 或 [ 命令
最基础、最通用的方式是:
test -x filename- 等价写法:
[ -x filename ](注意方括号前后必须有空格)
该命令执行后不输出文字,但会返回退出状态:成功(有执行权限)时返回 0,失败(无权限或文件不存在)时返回非 0。因此常配合 if 使用:
if [ -x ./script.sh ]; then echo "可以执行" else echo "不可执行(可能没权限,或文件不存在)" fi
区分“可执行”和“是可执行文件”
-x 只测权限,不保证文件能真正运行。比如一个空文本文件,只要 chmod +x 过,[ -x file ] 就会返回真,但它实际执行会失败。
若需更严谨地判断——既是普通文件,又具备执行权限——应组合测试:
[ -f file ] && [ -x file ]- 或单条写法:
[ -f file -a -x file ](-a表示逻辑与)
这样能排除目录、设备文件等虽有 x 权限但不能“执行”的情况。
现代推荐:用 [[ ]] 替代 [
[[ -x filename ]] 功能同 [ -x filename ],但更安全:
- 不会因变量为空或含空格而报错
- 语法更清晰,是 Bash/Zsh 等主流 shell 的首选
例如:if [[ -x "$myfile" ]]; then ... fi,加引号防路径含空格出错。
常见误判点提醒
别混淆这几个常用选项:
-
-e:只看文件是否存在(不管权限) -
-f:只确认是不是普通文件(不查能否执行) -
-r/-w:分别对应读、写权限,和执行无关
只有 -x 是专为“能否执行”设计的判断依据。

















