本篇內容均摘自《Linux命令行與shell腳本編程大全》艾杏,個人認為需要重點學習的章節(jié)。【免費】Linux命令行與Shell腳本編程大全 第3版 PDF全本 21MB 百度網(wǎng)盤下載 - 今夕是何夕 - 博客園
bash shell提供了兩項可在if-then語句中使用的高級特性:
1.用于數(shù)學表達式的雙括號
2.用于高級字符串處理功能的雙方括號
使用雙括號
雙括號命令允許你在比較過程中使用高級數(shù)學表達式极颓。 test命令只能在比較中使用簡單的算術操作朱盐。雙括號命令提供了更多的數(shù)學符號(這里有個表列了一些高級運算符號,可查書)菠隆。雙括號命令的格式如下:
(( expression ))
expression可以是任意的數(shù)學賦值或比較表達式兵琳。
$ 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*)視為一個模式嫡丙,并應用模式匹配規(guī)則拴袭。雙方括號命令$USER環(huán)境變量進行匹配,看它是否以字母r開頭曙博。如果是的話拥刻,比較通過, shell會執(zhí)行then部分的命令父泳。