shell中的各種括號用法

2021-08-28 02:37:09 字數 3395 閱讀 9712

一、圓括號()

1、建立程序列表

例如:$ (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls)

//最後輸出的值表示子shell的數目

ls;ps;echo $bash_subshell

test.sh

pid tty time cmd

11949 pts/2 00:00:00 bash

15482 pts/2 00:00:00 ps

0(ls;ps;echo $bash_subshell)

test.sh

pid tty time cmd

11949 pts/2 00:00:00 bash

15488 pts/2 00:00:00 bash

15490 pts/2 00:00:00 ps

1//建立了兩次子shell

(ls;ps;(echo $bash_subshell))

test.sh

pid tty time cmd

11949 pts/2 00:00:00 bash

15503 pts/2 00:00:00 bash

15505 pts/2 00:00:00 ps

2//顯示 $bash_subshell是在第一次建立的子shell執行的,所以結果是1

((ls;ps);echo $bash_subshell)

test.sh

pid tty time cmd

11949 pts/2 00:00:00 bash

15511 pts/2 00:00:00 bash

15512 pts/2 00:00:00 bash

15514 pts/2 00:00:00 ps

1

2、$(command)執行命令,返回命令的執行結果

3、((expression))expression可以是任意的數學賦值或比較表示式

例如:((10+20))

數學計算還可以用:bc命令,方括號var1=$[1 + 5],expr。

4、定義陣列

mytest=(one two three four five)

5、迴圈語句

for ((i=0;i<5;i++));do echo $i;done
6、擴充套件正規表示式

表示式分組

正規表示式模式也可以用圓括號進行分組。當你將正規表示式模式分組時,該組會被視為一

個標準字元。可以像對普通字元一樣給該組使用特殊字元。舉個例子:

$ echo "sat" | gawk '/sat(urday)?/'

sat$ echo "saturday" | gawk '/sat(urday)?/'

saturday

$結尾的urday分組以及問號,使得模式能夠匹配完整的saturday或縮寫sat。

將分組和管道符號一起使用來建立可能的模式匹配組是很常見的做法。

$ echo "cat" | gawk '/(c|b)a(b|t)/'

cat

二、方括號[  ]

1、[[expression]]比較字串

if [[ $user == r* ]]

then

echo "hello $user"

else

echo "sorry, i do not know you"

2、引用陣列元素

mytest=(one two three four five)

mytest[2]

3、數學計算:var1=$[1 + 5]

4、實現test命令的功能

if [ condition ]

then

commands

fi

5、正規表示式

bre特殊字元組,之間可以不加空格。

[[:alpha:]] 匹配任意字母字元,不管是大寫還是小寫

[[:alnum:]] 匹配任意字母數字字元0~9、 a~z或a~z

[[:blank:]] 匹配空格或製表符

[[:digit:]] 匹配0~9之間的數字

[[:lower:]] 匹配小寫字母字元a~z

[[:print:]] 匹配任意可列印字元

[[:punct:]] 匹配標點符號

[[:space:]] 匹配任意空白字元:空格、製表符、 nl、 ff、 vt和cr

[[:upper:]] 匹配任意大寫字母字元a~z

三、花括號

1、命令分組:語法為。使用花括號進行命令分組並不會像程序列表那樣建立出子shell。

2、協程

$ coproc my_job //也就是給協程起別名時用到,{}和命名間有空格

[1] 2570

$$ jobs

[1]+ running coproc my_job &

$

3、$形式引用變數。

1 #!/bin/bash

2 a=1

3 b=2

4 ab=3

5 echo $ab

6 echo $b

輸出:3 1b

4、讀取引數,shell引數從$0到$9,超過了,就要用花括號

total=$[ $ * $ ]

$表示最後乙個引數(引數個數不算指令碼本身)

5、函式定義

function addem
6、gawk中使用

必須將gawk的指令碼命令放到兩個花括號( {})中。

7、sed命令

$ sed '2' data1.txt
8、擴充套件正規表示式

posix ere模式

ere中的花括號允許你為可重複的正規表示式指定乙個上限。

$ echo "bet" | gawk --re-interval '/bet/'

bet$ echo "beet" | gawk --re-interval '/bet/'

$通過指定間隔為1,限定了該字元在匹配模式的字串中出現的次數。如果該字元出現多次,

模式匹配就不成立。

很多時候,同時指定下限和上限也很方便。

$ echo "bt" | gawk --re-interval '/bet/'

$$ echo "bet" | gawk --re-interval '/bet/'

bet

shell中的各種括號

在編寫shell scripts時,經常會用到括號,各種括號,各種用法。一 括號 圓括號 1 單小括號。命令組。括號中的命令將會新開乙個子shell順序執行,所以括號中的變數不能夠被指令碼餘下的部分使用。括號中多個命令之間用分號隔開,最後乙個命令可以沒有分號,各命令和括號之間不必有空格。命令替換。等...

shell中的各種括號

1.中括號 bash 的內部命令,和test是等同,作為條件判斷結構 if then cmd fi 引用陣列中每個元素的編號 2.雙中括號 雙中括號大多數情況與單中括號相同,但是 支援字串的模式匹配,如 hello hell?且能避免許多bug if i lt5 if a ne1 a a 2 if ...

shell中括號的用法

test 因為 shell 和我們通常程式語言不同,更多的情況是和它互動,總是呼叫別人。所以有些本屬於程式語言本身的概念在 shell 中會難以理解。基本功 不好,更容易 犯睏 了,我就是乙個 以 bash 為例 其他相容 shell 差不多 1.test 和 是 bash 的內部命令,gnu li...