文件测试运算符用于检测文件的各种状态和属性,目前支持的运算符如下:

  • ​-b file​​:是否块设备文件
  • ​-c file​​:是否字符设别文件
  • ​-d file​​:是否目录
  • ​-f file​​:是否普通文件
  • ​-g file​​:文件是否设置了 SGID 位
  • ​-k file​​:是否设置了粘着位
  • ​-p file​​:文件是否有名管道
  • ​-u file​​:文件是否设置了 SUID 位
  • ​-r file​​:文件是否可读
  • ​-w file​​:文件是否可写
  • ​-x file​​:文件是否可执行
  • ​-s file​​:文件是否为空(文件大小是否大于0),不为空返回 true。
  • ​-e file​​:文件(包括目录)是否存在

要特别注意的是​​-s file​​判断文件是否为空时,不为空才返回true。

变量 file 表示文件 ​​/User/chenshuyi/hello.sh​​,它的大小为 52 字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:

#!/bin/bash
# author:陈树义
# site:http://www.shuyi.me

file="/User/chenshuyi/hello.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi
if [ -w $file ]
then
echo "文件可写"
else
echo "文件不可写"
fi
if [ -x $file ]
then
echo "文件可执行"
else
echo "文件不可执行"
fi
if [ -f $file ]
then
echo "文件为普通文件"
else
echo "文件为特殊文件"
fi
if [ -d $file ]
then
echo "文件是个目录"
else
echo "文件不是个目录"
fi
if [ -s $file ]
then
echo "文件不为空"
else
echo "文件为空"
fi
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi

输出结果为:

文件可读
文件可写
文件可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在

Shell 入门教程(十六):如何进行文件判断_运算符