Unix / Linux - Shell 文件测试操作符示例


我们有一些运算符可用于测试与 Unix 文件相关的各种属性。

假设变量文件保存现有文件名“test”,其大小为 100 字节,并且具有读取写入执行权限 -

操作员 描述 例子
-b 文件 检查文件是否是块特殊文件;如果是,则条件成立。 [ -b $file ] 是错误的。
-c 文件 检查文件是否为字符特殊文件;如果是,则条件成立。 [ -c $file ] 是错误的。
-d 文件 检查文件是否是目录;如果是,则条件成立。 [ -d $file ] 不正确。
-f 文件 检查文件是否是普通文件而不是目录或特殊文件;如果是,则条件成立。 [ -f $file ] 为真。
-g 文件 检查文件是否设置了其组 ID (SGID) 位;如果是,则条件成立。 [ -g $file ] 是错误的。
-k 文件 检查文件是否设置了粘滞位;如果是,则条件成立。 [ -k $file ] 为假。
-p 文件 检查文件是否是命名管道;如果是,则条件成立。 [ -p $file ] 是错误的。
-t 文件 检查文件描述符是否打开并与终端关联;如果是,则条件成立。 [ -t $file ] 为假。
-u 文件 检查文件是否已设置其设置用户 ID (SUID) 位;如果是,则条件成立。 [ -u $file ] 是错误的。
-r 文件 检查文件是否可读;如果是,则条件成立。 [ -r $file ] 为真。
-w 文件 检查文件是否可写;如果是,则条件成立。 [ -w $file ] 是正确的。
-x 文件 检查文件是否可执行;如果是,则条件成立。 [ -x $file ] 为真。
-s 文件 检查文件大小是否大于 0;如果是,则条件成立。 [ -s $file ] 是正确的。
-e 文件 检查文件是否存在;即使 file 是一个目录但存在,也是如此。 [ -e $file ] 为真。

例子

以下示例使用所有文件测试运算符 -

假设变量文件保存现有文件名“/var/www/tutorialspoint/unix/test.sh”,其大小为 100 字节,并且具有执行权限 -

#!/bin/sh

file="/var/www/tutorialspoint/unix/test.sh"

if [ -r $file ]
then
   echo "File has read access"
else
   echo "File does not have read access"
fi

if [ -w $file ]
then
   echo "File has write permission"
else
   echo "File does not have write permission"
fi

if [ -x $file ]
then
   echo "File has execute permission"
else
   echo "File does not have execute permission"
fi

if [ -f $file ]
then
   echo "File is an ordinary file"
else
   echo "This is sepcial file"
fi

if [ -d $file ]
then
   echo "File is a directory"
else
   echo "This is not a directory"
fi

if [ -s $file ]
then
   echo "File size is not zero"
else
   echo "File size is zero"
fi

if [ -e $file ]
then
   echo "File exists"
else
   echo "File does not exist"
fi

上面的脚本将产生以下结果 -

File does not have write permission
File does not have execute permission
This is sepcial file
This is not a directory
File size is not zero
File does not exist

使用文件测试运算符时需要考虑以下几点 -

  • 运算符和表达式之间必须有空格。例如,2+2是不正确的;应该写成2+2。

  • if...then...else...fi语句是一个决策语句,在下一章中已经解释过。

unix-basic-operators.htm