美文网首页
第二天:条件测试表达式

第二天:条件测试表达式

作者: 古巷挂青灯 | 来源:发表于2019-07-18 20:04 被阅读0次

    3.1 shell的条件测试

    条件测试,作用是验证条件是否符合预期。以下是常用语法

    条件测试语法 说明
    语法1:test <测试表达式> 利用test命令测试条件表达式。test命令和” <测试表达式>”之间至少有一个空格
    语法2:[ <测试表达式> ] 通过[](单中括号)测试条件表达式的方法,和test命令的用法相同,注意[]的边界和内容之间至少有一个空格
    语法3:[[ <测试表达式> ]] 通过[[]](双中括号)测试条件表达式的值的方法,是比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格
    语法4:((测试表达式)) 通过(())(双小括号)进行测试条件表达式的方法,一般用于if语句里。(())双小括号两段不需要有空格

    针对以上表有几个注意事项需要说明:

    • Ø 语法1中的test命令和语法2中的[]是等价的。语法3中的[[]]为扩展的test命令,语法4中的(())命令常用于计算,建议在生产环境中使用相对友好的语法2,即中括号[]的语法
    • Ø 在双中括号[[]]中可以使用通配符(如*)等进行模式匹配,这是区别于其他几种语法的地方
    • Ø &&、||、>、<等操作符可以应用到[[]]中,但不能应用于[]中,在[]中一般用-a、-o、-gt、-lt取代
    • Ø 对于整数的关系运算,也可以使用Shell的算术运算符(())
    • Ø 条件测试简单语法示例
      n test条件测试语句示例
    第一张.jpeg

    n []条件测试语句示例


    第二年.jpeg
    • Ø 特殊的条件测试表达式语句,可以执行多个命令
    [ 条件1 ] && {
    命令1
    命令2
    ...
    }
    
    [[ 条件1 ]] && {
    命令1
    命令2
    ...
    }
    
    test 条件1 && {
    命令1
    命令2
    ...
    }
    

    3.2 文件测试表达式

    对于文件测试表达式中,常用的文件测试操作符如下所示:

    类型 说明
    [ -f file ],f的全称为file 文件存在
    [ -e file ],e的全称为exist 文件(夹)存在
    [ -d dir ],d的全称为directory 是目录
    [ -L file ],L的全称为link 是软链接
    [ -s file ],s的全称为size 文件存在且非空
    [ -S file ],S的全称为Socket 文件是Socket文件
    [ -r file ],r的全称为read 文件可读
    [ -w file ],w的全称为write 文件可写
    [ -x file ],x的全称为executable 文件可执行

    练习:
    以脚本传参和read读入的方式输入两个文件路径,任意一个文件不存在,则提示用户第几个文件不存在,并退出脚本(两个脚本)

    # 第一个文件不存在,则
    [ -f $1 ] || {
    echo "第一个文件不存在"
    exit
    }
     # 第二个文件不存在,则
    

    注:建议大家:在脚本的健壮性为前提下,重复的代码尽量简化

    3.3 字符串测试表达式

    字符串测试表达式的作用:比较两个字符是否相同、测试字符串的长度是否为0、字符串是否为NULL等,常用的字符串操作符如下所示:

    表达式 说明
    [ “a” = “b” ] 测试字符串是否相等。用作赋值时两边不能有空格,用做判断时必须有空格。
    [ “a” != “b” ] 测试字符串是否不相等
    [ -n “$str” ] 判断字符串是否非空
    [ -z “$str” ] 判断字符串是否为空
    [ $str ] 判断字符串是否非空,类似于 -n

    注意:对于字符串测试的时候,一定要把字符串加双引号,如[ -n “myvar” ]、[ “a =b” ]

    3.4 整数二元比较操作符

    整数二元比较操作符使用参考

    在[]以及test中使用的比较符号 在(())和[[]]中使用的比较符号 说明
    -eq ==或= 相等的英文equal
    -ne != 不相等的英文not equal
    -gt > 大于的英文greater than
    -ge >= 大于等于的英文greater equal
    -lt < 小于的英文less than
    -le <= 小于等于的英文less equal

    注意:不推荐使用[[]]和>、<等符号比较数字,因为在大小比较中,[[]]比较的是字符串的arscII码
    有关[]、[[]]、(())用法小结

    • Ø 整数加双引号比较也可以
    • Ø [[]]中使用类似-eq的写法是正确的,而[[]]中用类似>、<的写法也可能不对,有可能值比较第一位,原因在于arscII码的特殊性
    • Ø [[]]中用类似>、<的写法语法没错(经过转义),但是逻辑结果不对,使用=、!=可以正确比较
    • Ø (())中不能使用类似-eq的写法,可以使用类似>、<、==(=不可以)的写法
    • Ø oldchang倾力推荐:在比较数字的时候推荐使用[]和-gt、-lt等类似的搭配,或者使用(())和>、<等搭配

    3.5 逻辑操作符

    在[]和test中使用操作符 在[[]]和(())中使用操作符 说明
    -a && and,与运算,两端都真则为真
    -o || or,或运算,两端有一个为真则真
    ! ! not,非,相反为真

    注意,连接两个含有[]、test或者[[]]的表达式用&&、||

    相关文章

      网友评论

          本文标题:第二天:条件测试表达式

          本文链接:https://www.haomeiwen.com/subject/iuyrlctx.html