美文网首页
Shell [[]] 命令:条件判断的升级版

Shell [[]] 命令:条件判断的升级版

作者: 左诗右码 | 来源:发表于2024-06-16 13:59 被阅读0次

    大家好,今天我们来聊聊 Shell 脚本中的条件判断加强版——[[ ]] 命令。如果你对基本的 [] 命令已经熟悉,那么 [[ ]] 将是你的下一个升级技能点。

    [[ ]] 命令简介

    [[ ]] 命令与 test[] 命令相似,用来检测某个条件是否成立。但它提供了更多的功能和灵活性,特别是在处理字符串和文件时。

    # 当 expression 条件成立时,退出状态为 0,否则为非 0 值
    [[ expression ]]  # 表达式左右各有一个空格
    

    [[ ]] 的优势

    相比传统的 [][[ ]] 有一些显著的优势:

    • 不需要对变量加双引号,即使变量为空也不会导致错误。
    • 支持字符串的直接比较,不需要对 <> 进行转义。
    • 支持正则表达式匹配。

    示例:字符串和逻辑运算

    下面是一个使用 [[ ]] 进行字符串判断和逻辑运算的示例:

    #!/bin/bash
    
    read str1
    read str2
    
    # 检测字符串是否为空,不需要对变量名加双引号
    if [[ -z $str1 ]] || [[ -z $str2 ]]; then
      echo "字符串不能为空"
      exit 1
    # 直接使用 < 比较,不需要转义
    elif [[ $str1 < $str2 ]]; then
      echo '$str1 < $str2'
    else
      echo '$str1 >= $str2'
    fi
    

    [[]] 也支持逻辑运算

    [] 和 [[]] 写法对比

    test 或 [] 写法是否对错 [[]] 写法是否对错
    [ -z "str1" ] || [ -z "str2" ] [[ -z str1 ]] || [[ -zstr2 ]]
    [ -z "str1" -o -z "str2" ] [[ -z str1 -o -zstr2 ]] 错 ([[]] 不能使用 -o-a 选项)
    [ -z str1 || -zstr2 ] 错([] 不能在内部进行逻辑运算) [[ -z str1 || -zstr2 ]]

    [[ ]] 与逻辑运算

    [[ ]] 支持逻辑运算,但有一些限制。例如,它不支持 -a-o 选项,而是使用 &&|| 进行逻辑与和逻辑或:

    # 错误的写法,[[]] 不能使用 -o 和 -a 选项
    [[ -z $str1 -o -z $str2 ]]
    
    # 正确的写法,使用 || 代替 -o
    [[ -z $str1 ]] || [[ -z $str2 ]]
    

    [[ ]] 支持正则表达式

    [[ ]] 的一个强大特性是支持正则表达式匹配。这对于字符串的复杂验证非常有用:

    # 正则表达式匹配用法
    [[ str=~ regex ]]
    

    示例:使用正则表达式检测手机号

    下面是一个使用正则表达式检测手机号的示例:

    #!/bin/bash
    
    read phone
    
    # 正则表达式,匹配以1开头,后跟10个数字的手机号
    if [[ $phone =~ ^1[0-9]{10}$ ]]; then
      echo '是手机号'
    else
      echo '不是手机号'
    fi
    

    总结

    [[ ]] 命令是 Shell 脚本中进行条件判断的有力工具,特别是在处理字符串和文件时。它提供了更多的灵活性和强大的功能,如正则表达式匹配。

    以上就是今天的内容,希望这篇文章能够帮助你更好地理解和使用 [[ ]] 命令。

    相关文章

      网友评论

          本文标题:Shell [[]] 命令:条件判断的升级版

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