首页 > linux > bash 文件属性检查
2009九月20

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果然写起来很累。呵呵。

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/09/20/1474/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

4 Responses to “bash 文件属性检查”

  1. #1 老饕 回复 | 引用 Post:2009-09-20 18:01

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

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2009-09-20 18:15

    @老饕
    呵,谢谢老饕。

    [回复]

  3. #3 荒野无灯 回复 | 引用 Post:2009-09-21 12:22

    哈哈,我地板

    [回复]

  4. #4 simaopig 回复 | 引用 Post:2009-09-21 13:16

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

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)