结构化命令 之 if-then高级特性

本篇内容均摘自《Linux命令行与shell脚本编程大全》,个人认为需要重点学习的章节。【免费】Linux命令行与Shell脚本编程大全 第3版 PDF全本 21MB 百度网盘下载 - 今夕是何夕 - 博客园
bash shell提供了两项可在if-then语句中使用的高级特性:
1.用于数学表达式的双括号
2.用于高级字符串处理功能的双方括号
使用双括号
双括号命令允许你在比较过程中使用高级数学表达式。 test命令只能在比较中使用简单的算术操作。双括号命令提供了更多的数学符号(这里有个表列了一些高级运算符号,可查书)。双括号命令的格式如下:
(( expression ))
expression可以是任意的数学赋值或比较表达式。

$ cat test23.sh
#!/bin/bash
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

注意,不需要将双括号中表达式里的大于号转义。这是双括号命令提供的另一个高级特性。
使用双方括号
双方括号命令提供了针对字符串比较的高级特性。双方括号命令的格式如下:
[[ expression ]]
双方括号里的expression使用了test命令中采用的标准字符串比较。但它提供了test命令未提供的另一个特性——模式匹配( pattern matching)。

$ cat test24.sh
#!/bin/bash
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部分的命令。

你可能感兴趣的:(结构化命令 之 if-then高级特性)