Unix / Linux - Shell 文件测试运算符

  • 简述

    少数可用于测试与 Unix 文件相关联的各种属性的运算符。
    假设一个变量 file 保存一个现有的文件名“test”,其大小为 100 字节,并具有 read, writeexecute 许可 -
    操作符 描述 例子
    -b file 检查文件是否为块特殊文件;如果是,则条件变为真。 [ -b $file ] is false.
    -c file 检查文件是否为字符特殊文件;如果是,则条件变为真。 [ -c $file ] is false.
    -d file 检查文件是否为目录;如果是,则条件变为真。 [ -d $file ] is not true.
    -f file 检查文件是否是普通文件,而不是目录或特殊文件;如果是,则条件变为真。 [ -f $file ] is true.
    -g file 检查文件是否设置了组 ID (SGID) 位;如果是,则条件变为真。 [ -g $file ] is false.
    -k file 检查文件是否设置了粘滞位;如果是,则条件变为真。 [ -k $file ] is false.
    -p file 检查文件是否为命名管道;如果是,则条件变为真。 [ -p $file ] is false.
    -t file 检查文件描述符是否打开并与终端关联;如果是,则条件变为真。 [ -t $file ] is false.
    -u file 检查文件是否设置了设置用户 ID (SUID) 位;如果是,则条件变为真。 [ -u $file ] is false.
    -r file 检查文件是否可读;如果是,则条件变为真。 [ -r $file ] is true.
    -w file 检查文件是否可写;如果是,则条件变为真。 [ -w $file ] is true.
    -x file 检查文件是否可执行;如果是,则条件变为真。 [ -x $file ] is true.
    -s file 检查文件的大小是否大于 0;如果是,则条件变为真。 [ -s $file ] is true.
    -e file 检查文件是否存在;即使 file 是一个目录但存在,也是如此。 [ -e $file ] is true.
  • 例子

    以下示例使用所有 file test 运营商 -
    假设一个变量文件包含一个现有的文件名 "/var/www/jc2182/unix/test.sh" 其大小为 100 字节,并具有 read, writeexecute 许可 -
    
    #!/bin/sh
    file="/var/www/jc2182/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 声明是一个决策声明,在下一章中已经解释过。