• shell编程(if)


    0x00 if-then

    格式
    if command
    then
       commands
    fi
    ## shell编程的if判断条件与其他语言不同,条件处填写command(命令)
    ## 如果command执行后返回0(正确执行),则执行then后语句
    ## fi结束标志
    
    另一种格式
    if command;then
       commands
    fi
    

    0x01 if-then-else

    格式
    if command
    then
       commands
    else
       commands
    fi
    ## shell编程的if判断条件与其他语言不同,条件处填写command(命令)
    ## 如果command执行后返回0(正确执行),则执行then后语句
    ## 如果command执行后返回非0(执行失败),则执行else后的语句
    ## fi结束标志
    
    另一种格式
    if command;then
       commands
    else
       commands
    fi
    

    0x02 嵌套if

    格式
    if command
    then
       commands
    elif command
    then
       commands
    fi
    

    0x03 test命令

    shell中的if语句只可以判断命令返回状态值,无法做到判断条件
    但是test命令却可以做到对条件的判断
    test判断的条件为True时,返回状态值为 0 (正确执行)
    test判断的条件为False时,返回状态值为 非0 (执行失败)
    结合if语句可以得出,如下语法:

    if test condition
    then
       commands
    fi
    ## condition为判断条件
    
    另一种方法

    除了可以使用test命令还可以,还有如下方式:

    if [ condition ]
    then
       commands
    fi
    ## 注意严格按照
    ##[ condition ]
    ## 格式
    ## 注意[]和condition之间的空格
    ## 否则会报错
    

    0x04 数值比较

    比较 描述
    n1 -eq n2 检查n1是否等于n2
    n1 -lt n2 检查n1是否小于n2
    n1 -le n2 检查n1是否小于等于n2
    n1 -gt n2 检查n1是否大于n2
    n1 -ge n2 检查n1是否大于等于n2
    n1 -ne n2 检查n1是否不等于n2
    shell中数值比较用上述,不用">"、"<"、"="等。

    0x05 字符串比较

    比较 描述
    str1 = str2 检查str1是否等于str2
    str1 != str2 检查str1是否不等于str2
    str1 < str2 检查str1是否小于str2
    str1 > str2 检查str1是否大于str2
    -n str 检查str长度是否不为0
    -z str 检查str长度是否为0
    注意一

    当使用 ">" 或 "<"时需要使用转义符号,否则会被识别成重定向符号

    ## 错误
    if [ "a" > "a"]
    then
       echo "True"
    else
       echo "False"
    fi
    ## 正确
    if [ "a" > "a"]
    then
       echo "True"
    else
       echo "False"
    fi
    
    注意二

    -n或-z后面指定的字符串(变量)要带双引号(不可以单引号)

    str=""
    ## 错误
    if [ -n $str ]
    then
       echo "True"
    else
       echo "False"
    fi
    ## 正确
     if [ -n "$str" ]
    then
       echo "True"
    else
       echo "False"
    fi
    

    或者可以使用双方括号

    str=""
    ## 错误
    if [ -n $str ]
    then
       echo "True"
    else
       echo "False"
    fi
    ## 正确
     if [[ -n $str ]]
    then
       echo "True"
    else
       echo "False"
    fi
    
    注意三

    字符串 大于 和 小于 的比较原理:

    • 首先比较第一个字符,第一个字符大的不管后面的字符为大的一方
    • 如果第一个字符相等,比较第二个字符,第二个字符大的不管后面的字符为大的一方;如果第二个字符相同,依次类推比较
    • 字符之间的比较通过ascii数值进行比较
    注意四

    注意书写形式严格按照如下:

    [ "abc" = "abc" ]
    ## 注意空格
    

    否则可能会得到错误的结果

    0x06 文件比较

    比较 描述
    -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旧
    注意一

    root用户为最高权限用户,对任何文件的权限都为rwx
    所以当存在 -r、-w、-x比较的脚本所属用户为root时,对任何文件判断都为True

    注意二

    -O和-G比较中的当前用户为Linux系统终端当前登录的用户

    0x07 符合条件测试

    ## and
    [ condition1 ] && [ condition2 ]
    ## or
    [ condition1 ] || [ condition2 ]
    

    0x08 高级特性

    双括号
    if (( expression ))
    then
        commands
    fi
    ## 双括号主要是针对数学表达式
    ## 使用 > < = 等进行比较,不可以在使用 -gt等
    ## 可以使用逻辑、位运算符和自增、自减等
    
    案例:
    ## 错误
    if (( 10 -lt 10*10 ))
    then
       echo "True"
    else
       echo "False"
    fi
    ## 正确
    if (( 10 < 10*10 ))
    then
       echo "True"
    else
       echo "False"
    fi
    
    双方括号
    if [[ expression ]]
    then
        commands
    fi
    ## 双方括号主要是针对字符串比较
    ## 支持模式匹配
    ## 不是所有的shell都支持双方括号
    

    案例:

    if  [[ abc = a* ]]
    then
     echo "True"
    else
     echo "False"
    fi
    
  • 相关阅读:
    自动化测试-18.selenium之bugFree代码注释
    自动化测试-16.selenium数据的分离之Excel的使用
    自动化测试-15.selenium单选框与复选框状态判断
    自动化测试-14.selenium加载FireFox配置
    自动化测试-13.selenium执行JS处理滚动条
    Lucas-Kanade算法总结
    迟来的2013年总结及算法工程师/研究员找工作总结
    Android从文件读取图像显示的效率问题
    Viola Jones Face Detector
    谈谈Android中的SurfaceTexture
  • 原文地址:https://www.cnblogs.com/Wuser/p/13827680.html
Copyright © 2020-2023  润新知