【shell】各種括號()、(())、[]、[[]]、{}的使用


圓括號

1.單圓括號()

①命令組,括號中的命令將會開啟一個子shell獨立運行;括號中以分號連接,最后一個命令不需要;各命令和括號無需空格

Linux:/qins # (var=1;echo $var)
1

②命令替換,等同於`cmd`,shell將會執行$(cmd)中的命令,將其輸出放到原來的命令中

Linux:/qins # echo $(date +%Y-%m-%d)
2019-01-17

③定義數組

Linux:/qins # a=(1 2 3)

2.雙圓括號(())

①整數擴展。這種運算支持整數型的,但不支持浮點型的

Linux:/qins # echo $((2.1+3))
-bash: 2.1+3: syntax error: invalid arithmetic operator (error token is ".1+3")
Linux:/qins # echo $((2+3))
5

②跨進制運算

進制轉換例子:十六進制2AF5(10~15依次對應了A、B、C、D、E、F)

用豎式計算: 2AF5換算成10進制:
第0位: 5 * 16^0 = 5
第1位: F * 16^1 = 240
第2位: A * 16^2 = 2560
第3位: 2 * 16^3 = 8192 +
-------------------------------------
10997
直接計算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997

Linux:/qins # echo $((16#2af5))
10997

說明:16#2af5表示16進制的2af5

③重定義變量值

Linux:/qins # a=5;((a--));echo $a
4

④用於算術用運算比較

Linux:/qins # for((i=1;i<=5;i++));
> do
> echo $i
> done
1
2
3
4
5

3.中括號[]

①bash的內部命令,[和test是等同的。進行字符串比較,使用==與!=,整數比較使用-gt,-eq這種形式,[]中的邏輯與和邏輯或使用-a與-o表示

括號兩邊都有空格,字符與等號==之間需要空格

image

②引用數組中每個元素的編號

Linux:/qins # a=(1 2 3)

Linux:/qins # echo ${a[0]}
1

4.雙中括號[[]]

if [ $a -ne 1] && [ $a != 2 ]

可以寫成

if [[ $a != 1 && $a != 2 ]]

雙括號比[]更通用

5.大括號

①表達變量的值

Linux:/qins # a=2
Linux:/qins # echo $ab

Linux:/qins # echo ${a}b
2b

當表達式的值存在歧義的時候需要加上{}以便區分;

②批量操作

Linux:/qinys/oliver # touch {a,b,c,d}.dat
Linux:/qinys/oliver # ls
a.dat  b.dat  c.dat  d.dat

批量創建了文件

③擴展順序

Linux:/qinys/oliver # touch {1..5}file.dat
Linux:/qinys/oliver # ls -lrt
total 0
-rw-r--r-- 1 root root 0 Jan 17 21:01 5file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 4file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 3file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 2file.dat
-rw-r--r-- 1 root root 0 Jan 17 21:01 1file.dat

按順序批量創建了文件

④特殊替換:${var:-string},${var:+string},${var:=string},${var:?string}

說明:unset a表示將a被賦予的值清空

${var:-string},當var為空,則替換為空,var非空,則使用原值

Linux:/qinys/oliver # a=3
Linux:/qinys/oliver # echo ${a:-23}
3

Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:-23}
23

${var:+string}與${var:-string}剛好相反

Linux:/qinys/oliver # a=3

Linux:/qinys/oliver # echo ${a:+23}
23

Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:+23}

${var:=string}與${var:-string}功能類似,唯一不同的是,當var為空的時候,是將string賦予var

Linux:/qinys/oliver # a=3

Linux:/qinys/oliver # echo ${a:=23}
3

Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:=23}
23

${var:?string}與${var:-string}功能類似,唯一不同的是,當var為空的時候,將錯誤輸出並退出

Linux:/qinys/oliver # a=10
Linux:/qinys/oliver # echo ${a:?99}
10
Linux:/qinys/oliver # unset a
Linux:/qinys/oliver # echo ${a:?99}
-bash: a: 99

⑤多命令執行

image

前后必須有空格,並且每個命令結束都有分號



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM