zoukankan      html  css  js  c++  java
  • shell script测试命令(test)

    shell script测试命令(test)

    test命令

    检查系统上面某些文件或者相关的属性

    常用选项

    • test -e :检查该文件名是否存在

    例:检查/dmtsai是否存在

       [root@localhost scripts1]# test -e dmtsai && echo "exist" || echo "not exist"
       not exist
    
    

    注:检查系统中是否存在 dmtsai这个文件,存在则输出exist不存在则输出not exist

    • test -f :该文件名是否存在且为文件

    例:检查scripts1是否存在且是否为文件

     [root@localhost scripts1]# test -f scripts1 && echo "exist" || echo "not exist"
    exist
    

    注:检查系统中是否存在 scripts1这个文件,存在则输出exist不存在则输出not exist

    • test -d :该文件名是否存在且为目录

    例:检查/etc是否为目录

    [root@localhost scripts1]# test -d /etc && echo "exist"|| echo "not exist"
    exist
    

    注:检查系统中是否存在 /etc这个文件,存在则输出exist不存在则输出not exist

    针对文件的权限检查的常规选项

    • test -r :检测文件是否存在且具有“可读”权限(单root权限常有例外)

    例:检查根下的家目录中是file是否存在且有可读的权限

    [root@station40 ~]# ll
    total 24
    -rw-------. 1 root root  953 Apr 15 05:16 anaconda-ks.cfg
    -rw-r--r--. 1 root root    0 Apr 15 05:34 file==
    -rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
    -rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijain
    -r--r--r--. 1 root root   95 Apr 15 07:46 lijian.sh
    lrwxrwxrwx. 1 root root    6 Apr 16 05:46 lijian.sh1 -> lijain
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijian.sh2
    [root@station40 ~]# test -w lijain.sh || echo write
    
        
    
    

    注:考虑到一个文件有其属主和属组还有其他三类权限用户,所以验证test的权限检查选项是否有针对三种用户有不同。可以看出file这个三种用户都有可读权限.

    [root@station40 ~]# test -r file && echo read || echo not read
    read
    
    

    现在把属主的读权限去掉

    [root@station40 ~]# chmod u-r file
    [root@station40 ~]# ll
    total 24
    -rw-------. 1 root root  953 Apr 15 05:16 anaconda-ks.cfg
    --w-r--r--. 1 root root    0 Apr 15 05:34 file
    -rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
    -rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijain
    -r--r--r--. 1 root root   95 Apr 15 07:46 lijian.sh
    lrwxrwxrwx. 1 root root    6 Apr 16 05:46 lijian.sh1 -> lijain
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijian.sh2
    

    再次检查file文件的可读权限

    [root@station40 ~]# test -r file && echo read || echo not read
    read
    
    

    可以知道test权限的检查与属主的权限决定,所以接下来可以依次来验证(属组和其他用户)都可以得出test的权限查看是三类用户只要有一类具有某种权限就认定该文件具有该权限。

    [root@station40 ~]# chmod u-r,g-r,o-r file
    [root@station40 ~]# ll
    total 24
    -rw-------. 1 root root  953 Apr 15 05:16 anaconda-ks.cfg
    --w-------. 1 root root    0 Apr 15 05:34 file
    -rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
    -rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijain
    -r--r--r--. 1 root root   95 Apr 15 07:46 lijian.sh
    lrwxrwxrwx. 1 root root    6 Apr 16 05:46 lijian.sh1 -> lijain
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijian.sh2
    

    现在把三类用户的可读权限全部去掉在使用test检查该文件的可读权限,分析结果应该是输出 not read

    [root@station40 ~]# test -r file && echo read || echo not read
    read
    
    

    从上述结果可以看出与猜想的结果存在差异。这就是归结为test该命令的特性。因为刚才实行命令都是在root的权限下实现,所以现在切换至普通用户再进行检测file的可读性

    [lijian@station40 root]$ test -r file && echo read || echo not read
    not read
    
    

    在切换至普通用户后再对file这个文件进行test -r的检测显示结果为不可读。所以同理test的其他检查权限的选项都类似。

    整数数值的比较(test n1 option n2)

    • test n1 -eq n2 比较两个整数数值是否相等
    [lijian@station40 root]$ test 4 -eq 5 || echo error
    error
    
    [lijian@station40 root]$ test 5 -eq 5 && echo correct|| echo error
    correct
    
    

    上面的验证可以看出test在整数之间的大小比较用法

    • test n1 -gt n2比较n1是否大于n2
    [lijian@station40 root]$ test 5 -gt 2 && echo greater than|| echo error
    greater than
    
    [lijian@station40 root]$ test 0 -gt 2 && echo greater than|| echo error
    error
    
    

    对于数值比较方式方法都与上述较为类似故不做具体陈述

    判定字符串的数据

    • Test -z string判定字符串是否为0,若string为空字符串,则为true
    [lijian@station40 root]$ test -z jjj && echo correct || echo error
    error
    
    [lijian@station40 root]$ test -z  && echo correct || echo error
    correct
    
    
    
    
    

    可以看出对于非空字符和空字符都可以检查出来

    多重条件判定

    • test -r file -a -x file(文件同时具有可读可执行权限时为正确)
    [root@station40 ~]# ll
    total 24
    -rw-------. 1 root root  953 Apr 15 05:16 anaconda-ks.cfg
    --w-------. 1 root root    0 Apr 15 05:34 file
    -rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
    -rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijain
    -r--r--r--. 1 root root   95 Apr 15 07:46 lijian.sh
    lrwxrwxrwx. 1 root root    6 Apr 16 05:46 lijian.sh1 -> lijain
    -rw-r--r--. 2 root root    0 Apr 16 05:44 lijian.sh2
    [root@station40 ~]# test -r lijain -a -r lijain
    [root@station40 ~]# echo $?
    0
    
    

    可以看出lijain这个文件是具有可读可写权限的所以-a就可以回传正确。反之如下

    [lijian@station40 root]$  test -w file -a -r file
    [lijian@station40 root]$ echo $?
    1
    
    
  • 相关阅读:
    html标签
    正则表达式判断号码靓号类型
    power函数:求底的n次幂
    php5.3的新特性
    xml方式操作txt文件
    什么是闭包?
    php设计模式单例模式
    面试总结
    统计ip代码
    XSL语言学习
  • 原文地址:https://www.cnblogs.com/lijian-22huxiaoshan/p/7171973.html
Copyright © 2011-2022 走看看