shell 中内置关键字 [[]]: 检查条件是否成立
0.[[]] [] (())的对比
[[ ]] 对数字的比较不友好, 所以使用 if 判断条件时, 建议用 (()) 来处理整型数字, 用 [[]] 来处理字符串或者文件.
| 用法 | 说明 | 脚本 | 支持逻辑运算符 |
---|
(()) | ((expression)) 不需要注意空格 | - 在 (( )) 中使用变量 < strong ztid="105" ow="96" oh="17">可以加也可以不加
$ 前缀,(( )) 会自动解析变量名 - 只用于进行整数运算
- 可以使用 & lt;、<=、>、>= 等进行整数运算
- 表达式可以只有一个,也可以有多个,多个表达式之间以逗号
, 分隔 - 对于多个表达式的情况,以最后一个表达式的值作为整个 (( )) 命令的执行结果
。
- 支持逻辑运算符,逻辑运算符为 & amp;& ||
| | ((a>7 && b==c)) |
test/[] | test expression 或[ expression ] 注意空格 | - Shell 内置命令
- >、<、== 只能用来比较字符串
- 比较数字需要使用 -eq、-gt 等选项;
- 不管是比较字符串还是数字,test 都不支持 >= 和 <=。
- 变量名 < span style="color: #ff0000;" ztid="150" ow="132" oh="17">建议用双引号 "" 包围起来
- 比较字符串时需要对 >、< 进行转义
- 支持逻辑运算符,逻辑运算符为 - o -a
| - [ -z "$str1" ]||[ -z "$str2" ]# 建议对变量名加双引号
- [[ $str1 \< $str2 ]]
| 使用逻辑运算符 [ -z "$str1" ] || [ -z "$str2" ] | √ | 使用 - o -a ! 选项 [ -z "$str1" -o -z "$str2" ] | √ | [ -z "$str1" || -z "$str2" ] | ×
|
|
[[]] [[ ]] 是 test 的升级版,对细节进行了优化,并且扩展了一些功能 | [[ expression ]] 注意空格 | - Shell 内置关键字,不是命令,在使用时没有给函数传递参数的过程,所以 test 命令的某些注意事项在 [[ ]] 中就不存在了
- >、<、== 只能用来比较字符串
- 比较数字需要使用 -eq、-gt 等选项;
- 不需要把变量名用双引号 "" 包围起来
,即使变量是空值,也不会出错。 - 不需要、也不能对 >、< 进行转义,转义后会出错
。 - 支持正则表达式!!
- 支持逻辑运算符,逻辑运算符为 & amp;& ||
| - [[ -z $str1 ]] || [[ -z $str2 ]]
| [[ ]] 剔除了 test 命令的 - o 和 - a 选项,你只能使用 || 和 && 使用逻辑运算符 [[ -z $str1 ]]||[[ -z $str2 ]] | √ | [[ -z $str1 -o -z $str2 ]] | ×
| 使用逻辑运算符 [[ -z $str1 || -z $str2 ]] | √
|
|
1.[[]]支持正则表达式
在 Shell [[ ]] 中, 可以使用 =~ 来检测字符串是否符合某个正则表达式, 它的用法为:
[[ str =~ regex ]] 其中, str 表示字符串, regex 表示正则表达式.
功能 | 脚本 | 结果 | 说明 |
---|
检测一个字符串是否是手机号 | - read tel
- if [[ $tel =~ ^1[0-9]{10}$ ]]
- then
- echo "你输入的是手机号码"
- else
- echo "你输入的不是手机号码"
- fi
| 运行结果 1: 13203451100 你输入的是手机号码 < br ztid="323" ow="0" oh="0"> 运行结果 2: 132034511009 你输入的不是手机号码 | 对 ^1[0-9]{10}$ 的说明: - ^ 匹配字符串的开头(一个位置);
- [0-9]{10}匹配连续的十个数字;
- $ 匹配字符串的末尾(一个位置)。
《正则表达式 30 分钟入门教程 http://deerchao.net/tutorials/regex/regex.htm 》 |
shell 中内置关键字[[]]: 检查条件是否成立
来源: http://www.bubuko.com/infodetail-3475117.html