zoukankan      html  css  js  c++  java
  • SHELL编程之条件测试

    条件测试

    (一)概念:对特定的条件进行判断,以决定如何执行操作,当条件成立时,测试语句的返回值为0,否则为其他数值,意思就是如果 echo $? 的值是0,那么条件成立。条件测试的分类:文件测试、整数测试、字符串测试、逻辑测试。

      测试方法:

          方法1:test 条件表达式

          方法2:[  条件表达式  ]

    (二)测试方法:

    1.文件测试

    格式1:  [  操作符 文件或目录  ]  

    格式2:test  操作符 文件或目录 

    常用的测试操作符

        -d :测试是否为目录( Directory )

        -e :测试目录或文件是否存在(Exist)

        -f :测试是否为文件(File)

        -r :测试当前用户是否可读(read)

        -w:测试当前用户是否可写(write)

        -x :测试当前用户是否可执行(excute)

    1 [root@NEW1 ~]# [ -d /media/cdrom ]    #注意这里中括号里需要和内容有空格
    2 [root@NEW1 ~]# echo $?                # 如果测试条件不成立,返回数字为非0
    3 1
    4 [root@NEW1 ~]# [ -d /root ]
    5 [root@NEW1 ~]# echo $?
    6 0
    7 [root@NEW1 ~]# test -d /root && echo “yes”  
    8 “yes”
    9 #最后一个语句的意思是如果前面条件测试成立,则输出yes,应用原理:&&是一个''逻辑与''运算符,前面为真,后面为真,整个语句才为真,当左面为真,就会继续触发逻辑与,继续判断右面才知道整个语句是否为真,所以才能输出 yes。

     2、整数测试

    格式1:[ 整数1 操作符 整数2 ]

    格式2: test 整数1 操作符 整数2

    常用的测试操作符

        -eq : 等于 (Equal)

        -ne : 不等于 (Not Equal)

        -gt : 大于(Greater Than)

        -lt : 小于 (Lesser Than)

        -le : 小于或等于(Lesser or Equal)

        -ge : 大于或等于(Greater or Equal)

    1 [root@NEW1 ~]# who
    2 root tty1 2016-11-04 09:59 (:0)
    3 root pts/0 2016-11-04 09:59 (:0.0)
    4 [root@NEW1 ~]# who | wc -l
    5 2
    6 [root@NEW1 ~]# [ $(who | wc -l) -gt 1 ] && echo ''too many.''
    7 too many.

     3、字符串测试

    格式1:[ 字符串1 = 字符串2 ]

         [ 字符串1 != 字符串2 ]

    格式2:[ -z 字符串 ]

    常用的测试操作符

      = : 字符串内容相同

      != : 字符串内容不同

      -z : 字符串内容为空

     1 [root@NEW1 ~]# [ aaa = aaa ]         #判断两个字符串是否相等
     2 [root@NEW1 ~]# echo $?
     3 0
     4 [root@NEW1 ~]# [ aaa != aaa ]
     5 [root@NEW1 ~]# echo $?
     6 1
     7 [root@NEW1 ~]# [ -z '']               #引号里没有字符串,为空
     8 [root@NEW1 ~]# echo $?
     9 0
    10 [root@NEW1 ~]# [ -z 'aaa' ]           #引号里有字符串,不为空
    11 [root@NEW1 ~]# echo $?
    12 1
     1 [root@NEW1 ~]# read -p "请输入用户名: "  name               #提示用户输入字符串,并赋值给name变量
     2 请输入用户名:                                               #用户直接回车,没有输入
     3 [root@NEW1 ~]# [ -z $name ]                               #判断name变量是否为空
     4 [root@NEW1 ~]# echo $?
     5 0                                       #name为空,判断成立,显示0
     6 [root@NEW1 ~]# read -p "请输入用户名: " name
     7 请输入用户名: Mr.Mangood
     8 [root@NEW1 ~]# [ -z $name ]
     9 [root@NEW1 ~]# echo $?
    10 1 
    1 [root@NEW1 ~]# echo $LANG                                 #查看 LANG 语言变量
    2 zh_CN.UTF-8
    3 [root@NEW1 ~]# [ $LANG != "en.US" ] && echo "Not en.US"   #如果LANG不为en.US,则输出提示,考察的也是$变量的用法
    4 Not en.US

     4、逻辑测试

    格式:

      [ 表达式 ]  操作符 [ 表达式2 ] ……

      命令1  操作符  命令2 ……

    常用的操作符 ( 注意:-a和-o放在[]里面用,&&和||放在[]外面用 )

        -a  或  &&          逻辑与

        -o  或 ||             逻辑或

          !               逻辑否

    1 [root@NEW1 ~]# [ -d /etc ] && [ -r /etc ] && echo "you can open it"
    2 you can open it
    3 [root@NEW1 ~]# [ -d /etc ] || [ -d /home ] && echo "OK" 
    4 OK
    1 [root@NEW1 ~]# [ -d /etc ] || echo "测试或运算符当左边为真时,还是否执行右面"
    2 [root@NEW1 ~]# echo $?                                                   #左侧为真,不执行右侧echo部分
    3 0                                                                        #整体为真,因此输出0
    1 [root@NEW1 ~]# [ 2 -eq 2 -a 3 -eq 4 ] && [ -d /etc ]
    2 [root@NEW1 ~]# echo $?
    3 1
    4 
    5 [root@NEW1 ~]# [ 2 -eq 2 -o 3 -eq 4 ] && [ -d /etc ]
    6 [root@NEW1 ~]# echo $?
    7 0
  • 相关阅读:
    记一次git fatal: Unable to find remote helper for 'https'问题的解决
    LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
    LambdaMART简介——基于Ranklib源码(一 lambda计算)
    用中文把玩Google开源的Deep-Learning项目word2vec
    Ubuntu18.04 一次性升级Python所有库
    CSAPP家庭作业(第二章)
    两个有序链表序列的合并
    sublime text 3 配置Python开发环境
    Java课程设计-泡泡堂(个人)
    二叉树的先序建立与遍历
  • 原文地址:https://www.cnblogs.com/mangood/p/6029276.html
Copyright © 2011-2022 走看看