• test命令详解


    test命令格式:

    test condition

    通常,在if-then-else语句中,用[]代替,即[ condition ]。注意:方括号两边都要用空格。

     

    1、数值比较
    ===========================================================
    比 较 描 述
    -----------------------------------------------------------
    n1 -eq n2 检查n1是否与n2相等 (equal)
    n1 -ge n2 检查n1是否大于或等于n2 (greater and equal)
    n1 -gt n2 检查n1是否大于n2 (greater than)
    n1 -le n2 检查n1是否小于或等于n2 (less and equal)
    n1 -lt n2 检查n1是否小于n2 (less than)
    n1 -ne n2 检查n1是否不等于n2 (not equal)
    ===========================================================

    例子:

    #!/bin/bash 
    
    val1=10 
    val2=11
    
    if [ $val1 -gt 5 ] 
    then 
    echo "The test value $val1 is greater than 5" 
    fi
    
    if [ $val1 -eq $val2 ] 
    then 
    echo "The vaules are equal" 
    else 
    echo "The values are different" 
    fi

     

    2、字符串比较
    ===========================================================
    比 较 描 述
    -----------------------------------------------------------
    str1 = str2 检查str1是否和str2相同
    str1 != str2 检查str1是否和str2不同
    str1 < str2 检查str1是否比str2小
    str1 > str2 检查str1是否比str2大
    -n str1 检查str1的长度是否非0
    -z str1 检查str1的长度是否为0
    ===========================================================

    需要注意的是:

    - 字符串比较大于小于号必须转义,即加反斜线。
    - 字符串比较的顺序是按ASCII表的顺序的,大写字母比小写字母的值小。

    文件比较
    =======

    这是shell编程中最强大的也是最常用到的比较。test命令允许你测试Linux文件系统上文件和目录的状态,如下表:

    ==================================================================
    比 较 描 述
    ------------------------------------------------------------------
    -d file 检查file是否存在并是一个目录
    -e file 检查file是否存在
    -f file 检查file是否存在并是一个文件
    -r file 检查file是否存在并可读
    -s file 检查file是否存在并非空
    -w file 检查file是否存在并可写
    -x file 检查file是否存在并可执行
    -O file 检查file是否存在并属当前用户所有
    -G file 检查file是否存在并且默认组与当前用户相同
    file1 -nt file2 检查file1是否比file2新
    file1 -ot file2 检查file1是否比file2旧
    ==================================================================

     

    3、检查目录

    -d测试会检查指定的文件名是否在系统上以目录形式存在。当写文件到某个目录之前,或者是将文件放置到某个目录位置之前时,这会非常有用。

    #!/bin/bash 
    if [ -d $HOME ] 
    then 
    echo "Your HOME directory exists" 
    cd $HOME 
    ls -a 
    else 
    echo "There is a problem with your HOME directory" 
    fi

    上面代码使用了-d测试条件来检查用户的$HOME目录是否存在。如果它存在的话,它将继续使用cd命令来切到$HOME目录并进行显示目录下的文件。

     

    4、检查对象是否存在

    -e比较允许你在脚本中使用对象前检查文件或目录对象是否存在:

    #!/bin/bash 
    # checking if a directory exists 
    if [ -e $HOME ] 
    then 
    echo "OK on the directory, now to check the file" 
    # checking if a file exists 
    if [ -e $HOME/testing ] 
    then 
    # the file exists, append date to it 
    echo "Appending date to existing file" 
    date >> $HOME/testing 
    else 
    # the file does not exist, create a new file 
    echo "Creating new file" 
    echo > $HOME/testing 
    fi 
    else 
    echo "Sorry, you do not have a HOME directory" 
    fi

     

    5、检查文件

    -e比较适用于文件和目录。但要确定指定的对象是个文件,你必须用-f比较:

    #!/bin/bash 
    # check if a file 
    if [ -e $HOME ] 
    then 
    echo "The object exists, is it a file?" 
    if [ -f $HOME ] 
    then 
    echo "Yes, it is a file!" 
    else 
    echo "No, it is not a file!" 
    if [ -f $HOME/.bash_history ] 
    then 
    echo "But this is a file!" 
    fi 
    fi 
    else 
    echo "Sorry, the object does not exist" 
    fi

    6、检查是否可读

    在尝试从文件中读取数据之前,最好先测试一下是否能读文件。可以用-r测试。

    7、检查空文件

    用-s来检查文件是否为空,尤其是在你要删除文件时。当-s比较成功时要特别小心,它说明文件中有数据。

    8、检查是否可写

    -w比较用来判断你是否对文件有可写权限。

    9、检查是否可执行

    -x比较是一个简便的断判断你对某个特定文件是否有执行权限的方法。虽然可能大多数命令用不到它,但如果你要在shell中运行大量脚本,它可能很方便。

    10、检查所属关系

    -O比较允许你轻松地测试你是否是文件的属主。

    11、检查默认属组关系

    -G比较会检查文件的默认组,如果它匹配了用户的默认组,那就通过了。

  • 相关阅读:
    jbox使用总结
    NOI 2012 【迷失游乐园】
    SCOI 2008 【奖励关】
    trie树——【吴传之火烧连营】
    状压DP——【蜀传之单刀赴会】
    NOIP提高组2016 D2T3 【愤怒的小鸟】
    NOIP提高组2013 D2T3 【华容道】
    [学习笔记] [KMP]字符串匹配算法
    SHOI 2014 【概率充电器】
    HNOI 2015 【亚瑟王】
  • 原文地址:https://www.cnblogs.com/craftor/p/3811648.html
Copyright © 2020-2023  润新知