Linux中的if_then的双括号和双方括号的用法

这篇博客介绍了Bash Shell中的两种高级条件检查特性:双括号和双方括号。双括号允许在数学表达式中使用更丰富的运算符,如后增、后减、位运算等,而无需转义比较符号。另一方面,双方括号提供了字符串比较的模式匹配功能,支持正则表达式的匹配方式。这两种特性增强了Bash脚本的灵活性和功能性。
摘要由CSDN通过智能技术生成

bash shell提供了两项可在if-then语句中使用的高级特性:

  • 用于数学表达式的双括号
  • 用于高级字符串处理功能的双方括号
    后面几节将会详细描述每一种特性。

1 使用双括号

双括号命令允许你在比较过程中使用高级数学表达式。test命令只能在比较中使用简单的算术操作。双括号命令提供了更多的数学符号,这些符号对于用过其他编程语言的程序员而言并不陌生。双括号命令的格式如下:
(( expression ))
expression可以是任意的数学赋值或比较表达式。除了test命令使用的标准数学运算符,表12-4列出了双括号命令中会用到的其他运算符。
表12-4 双括号命令符号

符 号描 述
val++后增
val–后减
++val先增
–val先减
!逻辑求反
~位求反
**幂运算
<<左位移
>>右位移
&位布尔和
|位布尔或
&&逻辑和
||逻辑或

可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用来赋值。

$ cat test23.sh
#!/bin/bash
# using double parenthesis
#
val1=10
#
if (( $val1 ** 2 > 90 ))
then
(( val2 = $val1 ** 2 ))
echo "The square of $val1 is $val2"
fi
$
$ ./test23.sh
The square of 10 is 100

注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性。

2 使用双方括号

双方括号命令提供了针对字符串比较的高级特性。双方括号命令的格式如下:
[[ expression ]]
双方括号里的expression使用了test命令中采用的标准字符串比较。但它提供了test命令未提供的另一个特性——模式匹配(pattern matching)。
说明 双方括号在bash shell中工作良好。不过要小心,不是所有的shell都支持双方括号。
在模式匹配中,可以定义一个正则表达式(将在第20章中详细讨论)来匹配字符串值。

$ cat test24.sh
#!/bin/bash
# using pattern matching
#
if [[ $USER == r* ]]
then
echo "Hello $USER"
else
echo "Sorry, I do not know you"
fi
$
$ ./test24.sh
Hello rich

在上面的脚本中,我们使用了双等号(==)。双等号将右边的字符串(r*)视为一个模式,并应用模式匹配规则。双方括号命令$USER环境变量进行匹配,看它是否以字母r开头。如果是的话,比较通过,shell会执行then部分的命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值