写点什么

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

作者:左诗右码
  • 2024-06-17
    上海
  • 本文字数:868 字

    阅读完需:约 3 分钟

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

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

[[ ]] 命令简介

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


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

[[ ]] 的优势

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


  • 不需要对变量加双引号,即使变量为空也不会导致错误。

  • 支持字符串的直接比较,不需要对 <> 进行转义。

  • 支持正则表达式匹配。

示例:字符串和逻辑运算

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


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

[[]] 也支持逻辑运算

[] 和 [[]] 写法对比


[[ ]] 与逻辑运算

[[ ]] 支持逻辑运算,但有一些限制。例如,它不支持 -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 脚本中进行条件判断的有力工具,特别是在处理字符串和文件时。它提供了更多的灵活性和强大的功能,如正则表达式匹配。


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

发布于: 刚刚阅读数: 3
用户头像

左诗右码

关注

全网同名,欢迎关注交流。 2018-11-22 加入

三观比五官更正,思想比套路更深。常用技术栈PHP、Go、Python,享受编程,平时爱好写点文章。V公主号:「左诗右码」,欢迎关注交流。

评论

发布
暂无评论
Shell [[]] 命令:条件判断的升级版_左诗右码_InfoQ写作社区