首页 > linux > bash 文件属性检查

bash 文件属性检查

大约有20 个操作符可以用来在bash条件表达式中检查文件的属性。下面为大家介绍常用的一些。另外的一些套接字和文件描述符之类的我不是很清楚,不过传说中,黑客对此是很感兴趣的,如果有此类的朋友请移步 Google 查询,呵呵。

好久没有写bash的日志了,当时写的一些已经忘的差不多了,前些日子专门拿出一段时间来复习,学过的东西还让它丢了的话,心里会有些难过的。

bash 常用属性操作符:

操作符 如果为真
-d file file存在并且为一个目录
-e file file存在
-f file file存在并且为一个正规文件(即不是一个目录或其他特殊类型的文件)
-r file 对file有读权限
-s file file存在并且非空
-w file 对file有可写权限
-x file 对file有可执行权限,如果为目录,则有目录搜索权限
-O file 你是file的owner所有者
-G file file的组ID匹配你的ID,如果你有多个用户组,则匹配其中一个即可
file1 -nt file2 file1 newer than file2,文件1比文件2要新,比较的是修改时间
file1 -ot file2 file2 older than file2,文件1比文件2要旧,比较的是修改时间

bash 组合运算符:

在bash的[和]内的条件表达式也可以使用逻辑操作符&&和||组合起来,例如:

if [ condition ] && [ condition ]; then

也可以使用如下逻辑操作符将条件表达式和shell命令组合起来:

if command && [ condition ]; then

还可以使用!非操作符,这样只有当expr为假时,!expr值才为真。另外,可以通过圆括号用斜线转义防止shell对其进行特殊处理将之分组或使用如下两个逻辑操作符:-a(AND)和-o(OR),进而实现条件捷足先登符的复杂逻辑表达式。

-a和-o操作符类似于退出状态时所用的&&和||操作符,不同的是,-a和-o只在test条件表达式内可用。注意我前面介绍过,在shell中[....]等同于内置命令test。

bash 组合运算符示例:

使用bash的文件属性检查来模拟ls -l的信息,并且使用更好的,更清楚的表达方式。先写出代码,稍候我再给大家放出讲解。

#/bin/bash
file=$1
file=${file:?'必须给出参数'}
if [ ! -e $file ]; then
    echo "$file 不存在,你在玩我?"
    exit 1
fi
if [ -d $file ]; then
    echo "$file 是一个目录,并且你小子"
    if [ -x $file ]; then
        echo "可以"
    else
        echo "不可以"
    fi
    echo "对此进行搜索"  
elif [ -f $file ]; then
    echo "$file 是一个正规文件"
else
    echo "$file不是一个正规文件"
fi
if [ -O $file ]; then
    echo "你是$file的拥有者"
else
    echo "你不是$file的拥有者,别想没用的了"
fi
if [ -r $file ]; then
    echo "你对$file拥有"
else
    echo "你并不对$file拥有"
fi
echo "可读权限"
if [ -w $file ]; then
    echo "你对$file拥有"
else
    echo "你并不对$file拥有"
fi
echo "可写权限"
if [ -x $file -a ! -d $file ]; then
    echo "你拥有对$file"
else
    echo "你并不拥有对$file"
fi
echo "可执行的权限"

运行./ls.sh ~/www/shell/pro.html,得到结果如下:

bash模拟ls -l

bash模拟ls -l

看这里的代码,因为我用中文写的描述,所以不难看懂,唯一对最后一句:if [ -x $file -a ! -d $file ]; 的条件可能有一些不理解,这里简单描述一下:

这里先判断$file变量是否可执行,并且(-a)$file变量不是一个目录——! -d $file的时候输出”你拥有对$file”.其等价于 [ \(-x $file\) -a ( ! -d $file \) ] 文件测试首先被执行,然后是符号!,然后是AND和OR测试。

无限感慨:

唉,程序一天不写就会生疏,只有常写才会有所提升。现在长时间不写shell果然写起来很累。呵呵。

  1. 老饕 九 20th, 2009 @ 18:01 | #1

    抢沙发~~不懂,纯支持~~呵呵

  2. simaopig 九 20th, 2009 @ 18:15 | #2

    @老饕
    呵,谢谢老饕。

  3. 荒野无灯 九 21st, 2009 @ 12:22 | #3

    哈哈,我地板

  4. simaopig 九 21st, 2009 @ 13:16 | #4

    @荒野无灯
    呵呵。谢谢捧场。

评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks