前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell [[]] 命令:条件判断的升级版

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

原创
作者头像
南山竹
发布2024-06-17 14:19:12
670
发布2024-06-17 14:19:12

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

[ ] 命令简介

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

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

[ ] 的优势

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

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

示例:字符串和逻辑运算

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

代码语言:bash
复制
#!/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 ] || [ -z $str2 ]

-z "$str1" -o -z "$str2"

[ -z $str1 -o -z $str2 ]

错 ([[]] 不能使用 -o-a 选项)

-z $str1 || -z $str2

错([] 不能在内部进行逻辑运算)

[ -z $str1 || -z $str2 ]

[ ] 与逻辑运算

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

代码语言:bash
复制
# 错误的写法,[[]] 不能使用 -o 和 -a 选项
[[ -z $str1 -o -z $str2 ]]

# 正确的写法,使用 || 代替 -o
[[ -z $str1 ]] || [[ -z $str2 ]]

[ ] 支持正则表达式

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

代码语言:bash
复制
# 正则表达式匹配用法
[[ str=~ regex ]]

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

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

代码语言:bash
复制
#!/bin/bash

read phone

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

总结

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [ ] 命令简介
  • [ ] 的优势
  • 示例:字符串和逻辑运算
  • [[]] 也支持逻辑运算
  • [ ] 与逻辑运算
  • [ ] 支持正则表达式
  • 示例:使用正则表达式检测手机号
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档