1. 程式人生 > >shell中的單層大/中/小括號、雙層大中小括號、命令替換等

shell中的單層大/中/小括號、雙層大中小括號、命令替換等

參考:https://www.cnblogs.com/itxdm/p/something_of_shellscirpt.html

https://www.cnblogs.com/hanggegege/p/5928870.html

https://blog.csdn.net/ztf312/article/details/52317571

簡要描述:

1、單小括號( ):把括號內的命令在另一個shell執行,並把結果返回左右不留空格,一般要帶字首 $

  雙小括號(( )) :整數比較、四則運算,括住的內容,完全符合C語言語法,一般要帶字首 $

2、單中括號[ ]:類似於測試命令(數字、字串、檔案三者的判斷),左右必須留空格,特殊字元需用轉義符\,一般用於if語句

  雙中括號[[ ]]:功能類似於單中括號,區別在於特殊字元無需轉義,而且支援>、<等符號判斷

3、單大括號{ }:快速替換

4、單反引``命令替換

一、小括號

1、單層小括號( ),執行shell命令並取得輸出,例如:var=$(ls)、echo $(ls)

2、雙層小括號(( )),內部可以

echo $((3+2))  輸出5
echo $((3>2))  輸出1
echo $((25<3 ? 2:3))   輸出3
echo $var 
echo $((var=2+3))   輸出5
echo $var 
echo $((var++)) 輸出5,顯然符合c語言特性
echo $var  輸出6

二、中括號,[ ]、[[ ]]都類似於test命令,一般用於if語句。http://www.runoob.com/linux/linux-shell-test.html

單雙中括號的共同點:

(1) 功能都是用於數字、字串、檔案三者的判斷,字串比較只能用==、!=、-z、-n,數字比較用-eq、-gt等,檔案判斷用-e -d等,取非用!,詳情查閱test參考連結

(2) 兩者左右兩邊都要留空格、運算子兩邊都要留空格!!!

兩者的區別:

(1) 轉義方面:若[ ]中出現特殊字元如( ),則左右小括號都要轉義,寫成\(\);而[[ ]]無需轉義

(2) 判斷運算子、邏輯運算子,分別支援哪些?(部分如下)

[ ]支援-eq-gt-ge-a-o
[[ ]]支援==和-eq>和-gt

-ge、 不支援>=

&&||

1、單中括號 [ ]

a=3
str="ab"
filePath=./hello.c   #右值的單雙引號可用可不用
if [ 3 -eq $a ]; then echo yes; fi  #數字判斷:輸出yes
if [ $str!="cd" ]; then echo yes; fi  #字串判斷:輸出yes
if [ -e filePath ]; then echo yes; fi  #檔案判斷:若存在則輸出yes

2、雙中括號[[ ]]

if [[ 3 > 2 && 3 < 2 ]]; then echo yes; fi  #數字比較示例:輸出yes

變數呼叫:

    方法(1):${var}

    方法(2):$var

命令呼叫:

    方法(1):`COMMAND`

    方法(2):$(COMMAND)

測試表達式:

    方法(1):[ expression ]

    方法(2):[[ expression ]]

    方法(3):test expression

算術運算

    方法(1):let 算術運算表示式

                let C=$A+$B 這裡變數A和B前面的$可以省略

    方法(2):$[算術運算表示式]

                C=$[$A+$B]

    方法(3):$((算術運算表示式))

                C=$(($A+$B))    #參考雙( )的用法

    方法(4):expr 算術運算表示式,表示式中各運算元及運算子之間要有空格,而且要使用命令引用,遇到乘法的*號還要轉義

                C=`expr $A + $B`    #參考單反引號的用法

                或C=$(expr $A + $B)   #參考單( )的用法

    方法(5):expr $[算術運算表示式],遇到乘法*號不用轉義。