Bash Shell 中的 test —— 条件测试!以及 test 和 [ ] :


 

        此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看:


test 命令的作用:

       
判断某表达式是否满足需求!需要由测试机制来实现!

root@zhengzelin:~# type test
test is a shell builtin

内部命令!

help test 查看更多信息:

root@zhengzelin:~# help test

test: test [expr]       格式: test [ 表达式 ]    

    "Evaluate conditional expression."
    # 评估条件表达式
    
    "Exits with a status of 0 (true) or 1 (false) depending on the evaluation of EXPR. " 
    # 根据表达式的评估,以 0()1(flase) 的状态退出。
    
    "Expressions may be unary or binary."  
    # 表达式可以是一元或二进制。
    
    "Unary expressions are often used to examine the status of a file." 
    # 一元表达式通常用于检查文件的状态。
    
    "There are string operators and numeric comparison operators as well."
    # 也有字符串运算符和数字比较运算符。

1、test 中的 文件测试运算符


    File operators:   # 文件运算符


文件状态:  
      -a FILE        # 如果文件存在则为 true-b FILE        # 如果文件为 块设备文件 则返回 true-c FILE        # 如果文件为 字符设备文件 则返回 true-d FILE        # 如果为目录,则返回 true-e FILE        # 如果文件存在则为 true-f FILE        # 如果文件存在并且是常规文件,则为true!(常规文件:非字符设备文件、非块设备文件)
     
链接文件:
      -h FILE        # 如果文件是符号链接,则为true。(硬链接文件)
      -L FILE        # 如果文件是符号链接,则为true。(软连接文件)
      
文件权限:      
      -r FILE        # 如果你对这个文件有 读权限,则为 true-w FILE        # 如果你对这个文件有 写权限,则为 true-x FILE        # 如果你对这个文件有 执行权限,则为 true。
      
文件大小:     
      -s FILE        # 如果这个文件存在,且不为空,则为 true。
     
用户和组 id:
      -g FILE       # 如果文件是 set-group-id 文件,则为 true-u FILE       # 如果文件是 set-user-id 文件,则为 true-k FILE       # 如果文件的“粘滞”位已设置,则为true-S FILE       # 如果文件是套接字,则为true-p FILE       # 如果file是命名管道,则为true-t FD          True if FD is opened on a terminal.
      
属主、属组:     
      -O FILE       # 如果文件 有效的 归你所有,则为 true-G FILE       # 如果文件 有效的 归你所属的组 所有,则为 true-N FILE       # 如果文件自上次读取以来已被修改,则为trueFILE1 -nt FILE2  # 如果 文件1 比 文件2 要新,则为 trueFILE1 -ot FILE2  # 如果 文件1 比 文件2 要旧,则为 trueFILE1 -ef FILE2  # 如果 文件1 是 文件2 的硬链接,则为 true

2、test 中的 字符串运算符:


    String operators:
    
      -z STRING      # 如果 字符串 为空,则为 true-n STRING      # 如果 字符串 不为空,则为 trueSTRING      # 如果 字符串 不为空,则为 true ( 不写 -n 代表的意思一样!)         
    
      STRING1 = STRING2
                    
      STRING1 != STRING2
                    
      STRING1 < STRING2            # 从字典上看,如果 string1 排在 string2 之前,则为 trueSTRING1 > STRING2            # 从字典上看,如果 string1 排在 string2 之后,则为 true 。

# 千万记得格式哦 ,空格
                     

3、test 中的 其他运算符:


    Other operators:

shell 变量:

      -o OPTION     # 如果启用了 shell 选项 OPTION ,则为 true-v VAR	    # 如果设置了 shell 变量 VAR,则为true
      -R VAR	    # 如果设置了 shell 变量 VAR 并且是名称引用,则为True。
 
      
与或非:    

      EXPR1 -a EXPR2  # expr1 和 expr2 都为真,结果才为 trueEXPR1 -o EXPR2  # expr1 和 expr2 只要一个为真,结果就为 true! EXPR          # 如果 expr 为 flase,那么结果为 true 。


算数测试:
   
      arg1 OP arg2   OP可以是:"-eq, -ne,-lt, -le, -gt, or -ge." 中的任意一个!
eg:①:使用 test 来测试字符串:
root@zhengzelin:~# a=abc
root@zhengzelin:~# b=def
root@zhengzelin:~# test $a = $b;echo $?
1

root@zhengzelin:~# b=abc
root@zhengzelin:~# test $a = $b;echo $?
0

注意哦,一定要用 ; 而不能使用 |
eg:②:使用 test 进行算数测试:
root@zhengzelin:~# a=1
root@zhengzelin:~# b=2
root@zhengzelin:~# test $a -ne $b;echo $?
0

root@zhengzelin:~# if [ $a -ne $b ];then echo "yse";fi 
yes

 

★ 与 test 完全等价的符号: [ ]:

root@zhengzelin:~# a=abc
root@zhengzelin:~# b=de
root@zhengzelin:~# test $a = $b
root@zhengzelin:~# echo $?
1

root@zhengzelin:~# [ $a = $b ] 
root@zhengzelin:~# echo $?
1
发布了99 篇原创文章 · 获赞 72 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ljlfather/article/details/105156700