美文网首页
shell入门10-探究[[]]和[]的区别

shell入门10-探究[[]]和[]的区别

作者: 万州客 | 来源:发表于2022-12-29 08:02 被阅读0次

    [] 和 [[]],涨知识了。

    多数情况下[]和[[]]是可以通用的,两者的主要差异是:test 或[]是符合 POSIX 标准的测
    试语句,兼容性更强,几乎可以运行在所有 Shell 解释器中,相比较而言[[]]仅可运行在特定
    的几个 Shell 解释器中(如 Bash、Zsh 等)。事实上,目前支持使用[[]]进行条件测试的解释
    器已经足够多了。使用[[]]进行测试判断时甚至可以使用正则表达式。
    首先,测试两者的通用表达式(同样,一定要注意空格的问题,空格不可或缺)。


    image.png

    一,代码练习

    1002  LANGC=C
     1003  [[ b > A ]] && echo Y || echo N
     1004  [[ A > 6 ]] && echo Y || echo N
     1005  [[ A > b ]] && echo Y || echo N
     1006  [[ 8 > C ]] && echo Y || echo N
     1007  [[ 8 > 2 ]] && echo Y || echo N
     1008  [[ 2 > 8 ]] && echo Y || echo N
     1009  [[ T > F ]] && echo Y || echo N
     1010  [[ m > c ]] && echo Y || echo N
     1011  [[ yes == yes -a no == no ]] && echo Y || echo N
     1012  [ yes == yes -a no == no ] && echo Y || echo N
     1013  [ yes == y -a no == no ] && echo Y || echo N
     1014  [ yes == y -o no == no ] && echo Y || echo N
     1015  [[ yes == y && no == no ]] && echo Y || echo N
     1016  [[ yes == y || no == no ]] && echo Y || echo N
     1017  [[ yes == yes || no == no ]] && echo Y || echo N
     1018  [[ A == A && 6 -eq 6 && C == C ]]
     1019  echo $?
     1020  [[ A == A && 6 -eq 3 && C == C ]]
     1021  echo $?
     1022  name=Jacob
     1023  [[ $name == J* ]] && echo Y || echo N
     1024  [[ $name == A* ]] && echo Y || echo N
     1025  [[ $name == J?cob ]] && echo Y || echo N
     1026  [[ a == [a-z] ]] && echo Y || echo N
     1027  [[ a == [0-9] ]] && echo Y || echo N
     1028  [ $name == J? ] && echo Y||echo N
     1029  [ $name == J* ] && echo Y||echo N
     1030  name='J*'
     1031  [ $name == 'J*' ] && echo Y||echo N
     1032  [[ a == a ]] && echo Y||echo N
     1033  [[ a == b ]] && echo Y||echo N
     1034  name="welcome to beijing"
     1035  [[ $name =~ w ]] && echo Y||echo N
     1036  [[ $name =~ [0-9] ]] && echo Y||echo N
     1037  [[ $name =~ [a-z] ]] && echo Y||echo N
     1038  [[ $name =~ [A-Z] ]] && echo Y||echo N
     1039  [[ a == a && (b == b || c == d) ]] && echo Y || echo N
     1040  [[ a == a && (b == g || c == d) ]] && echo Y || echo N
    

    二,对比练习

    通过建立用户名和修改密码的练习,可以深刻的对比[]和[[]]的用户区别。效果一样。

    #!/bin/bash
    # version:0.6
    
    read -p "请输入用户名:" user
    read -p "请输入密码:" pass
    
    #if [ ! -z "$user" ]; then
    #  if [ ! -z "$pass" ]; then
    #    useradd "$user"
    #    echo "$pass" | passwd --stdin "$user"
    #  fi
    #fi
    
    #if [[ ! -z "$user" && ! -z "$pass" ]]; then
    #    useradd "$user"
    #    echo "$pass" | passwd --stdin "$user"
    #fi
    
    #if [ ! -z "$user" -a ! -z "$pass" ]; then
    #    useradd "$user"
    #    echo "$pass" | passwd --stdin "$user"
    #fi
    
    if [ ! -z "$user" ] && [ ! -z "$pass" ]; then
        useradd "$user"
        echo "$pass" | passwd --stdin "$user"
    fi
    

    相关文章

      网友评论

          本文标题:shell入门10-探究[[]]和[]的区别

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