Unix / Linux - Shell 文件测试运算符
-
简述
少数可用于测试与 Unix 文件相关联的各种属性的运算符。假设一个变量 file 保存一个现有的文件名“test”,其大小为 100 字节,并具有 read, write 和 execute 许可 -操作符 描述 例子 -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, write 和 execute 许可 -#!/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 声明是一个决策声明,在下一章中已经解释过。
-