模式匹配記憶方法:
# 是去掉左邊(在鍵盤上#在$之左邊)
% 是去掉右邊(在鍵盤上%在$之右邊)
#和%中的單一符號是最小匹配,兩個相同符號是最大匹配。html
(1)${a} 變量a的值, 在不引發歧義的狀況下能夠省略大括號。python
(2)$(cmd) 命令替換,和`cmd`效果相同,結果爲shell命令cmd的輸,過某些Shell版本不支持$()形式的命令替換, 如tcsh。正則表達式
(3)$((expression)) 和`exprexpression`效果相同, 計算數學表達式exp的數值, 其中exp只要符合C語言的運算規則便可, 甚至三目運算符和邏輯表達式均可以計算。shell
一、多條命令執行express
(1)單小括號,(cmd1;cmd2;cmd3) 新開一個子shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最後一個命令後能夠沒有分號。centos
(2)單大括號,{ cmd1;cmd2;cmd3;} 在當前shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最後一個命令後必須有分號, 第一條命令和左括號之間必須用空格隔開。
對{}和()而言, 括號中的重定向符隻影響該條命令, 而括號外的重定向符影響到括號中的全部命令。數組
例如:bash
#!/bin/bash str1="test1" str2="Test1" num1=33 num2=4 ###################string complare######### #1 [] use = if [ "$str1" = "$str2" ] then echo "#1 ${str1} equals to ${str2}" else echo "#1 ${str1} not e2 $str2" fi #2 [] use != if [ "$str1" != "$str2" ] then echo "#2 ${str1} not equals to ${str2}" else echo "#2 ${str1} eq2 $str2" fi #3 [] use \< (注意字符串之間不能有空格) if [ "${str1}"\<"${str2}" ] then echo "#3 ${str1} less than ${str2}" else echo "#3 ${str1} eq2 or grater than $str2" fi #4 [[]] use < if [[ "$str1" < "$str2" ]] then echo "#4 ${str1} less than ${str2}" else echo "#4 ${str1} eq2 or grater than $str2" fi #################### number complare ############################ #1 [] use -lt.-gt,-ge if [ "$num1" -lt "${num2}" ] then echo "${num1} less than ${num2}" else echo "${num1} eq2 or grater than $num2" fi #2 [] use \< is complare as string (錯誤的示範,不能在[]中使用轉義比較數字,會當成字符串比較) if [ "$num1" \< "${num2}" ] then echo "${num1} less than ${num2}" else echo "${num1} eq2 or grater than $num2" fi #3 (()) use < if (( "$num1" < "${num2}" )) then echo "${num1} less than ${num2}" else echo "${num1} eq2 or grater than $num2" fi #####################(()) use to number +-*/ ########################### echo "############# (()) use ro number +-*/% ##############" echo $(($num1 + $num2)) echo $(($num1 - $num2)) echo $(($num1 * $num2)) echo $(($num1 / $num2)) echo $(($num1 % $num2)) ####################### () ################### echo "############# \$() use like \`\` ##################" echo `which pwd` echo $(which pwd) ##################### \${} to get variables ######################### echo "################## \${var} is like \$var ################" echo ${str1} echo $str1
運行結果:less
#1 test1 not e2 Test1 #2 test1 not equals to Test1 #3 test1 less than Test1 #4 test1 less than Test1 33 eq2 or grater than 4 33 less than 4 33 eq2 or grater than 4 ############# (()) use ro number +-*/% ############## 37 29 132 8 1 ############# $() use like `` ################## /usr/bin/pwd /usr/bin/pwd ################## ${var} is like $var ################ test1 test1
總結:函數
(1)$(cmd)與··(鍵盤上1左邊的~)同樣,都是命令替換,能夠將執行結果提取出來
(2)[]使用的時候[ ]先後都必須有空格,且兩個字符或數字之間的比較符左右也必須有空格。
(3) []是test的另外一種形式,[]中間只能使用= 和 != 比較字符串,若是使用< 、>須要進行轉義\。
[]中間若是比較數字須要用 -lt 等符號,不能使用\<比較數字,會當成字符串處理。
(4)[[]]可用於處理邏輯命令,也能夠用於處理字符串是否相等,且使用<、>不用轉義符.
(5)(())可用於比較數字,且不用轉義,並且也能夠用於數字計算,比較的時候也是用普通的>,<。(())計算的時候運算符與數字之間不能有空格,例如: sum=$(($sum+4))
(6)字符串比較 用[],與普通的<,>,=,!=符號,若是使用<,>須要轉義;或者使用[[]]比較字符串也是用普通符號不用轉義
數字比較用[]的時候用-lt,-gt等符號,不能使用\<(由於會當成字符串處理);或者用(())比較數字用普通符號不用轉義
(7)能夠將$理解爲取變量的符號,$var 或者 ${} ,在不影響語義的狀況下能夠省去{},可是最好寫上{}。例如:test=XXX.$testWWWW.這時候就必須加上{}變爲${test}WWWW
更多的特殊符號參考:http://www.jb51.net/article/69966.htm