Bash Shell 裡的各種括號

2021-06-28 12:06:47 字數 2379 閱讀 1416

bash shell 裡的各種括號

對於很多玩shell的人,括號是個很尷尬的問題,用起來沒問題,說起來不明白,我在這裡總結一下bash shell幾種括號的用法和區別,別的shell我不會。。。

(( )) :一對圓括號有兩個地方用到。

1,for迴圈,

for (( expr1 ; expr2 ; expr3 ))

這裡一對雙括號裡邊的表示式,gnu的文件指出,expr1支援 shell arithmetic;expr2不為0時,expr3被賦值且語句執行。說的很麻煩,還要花時間搞清楚什麼是shell arithmetic。其實一言以蔽之,支援數字條件。比如:

for (( a=0 ; a<10 ; a++ )); do echo $a; done

會輸出 0 1 2 3 (帶換行哦~~~)

2,數學表達

(( )) 和 $(( ))

(( )) 的用法與let一樣,就不用多解釋了吧~~~

$(( ))就是把計算結果拿出來,可以用在雙引號裡邊,比如:

echo "1+2=$(( 1 + 2 ))"

會輸出 1+2=3

( ):乙個圓括號

在for迴圈裡,跟c語法一樣一樣的。

或者是子程式,返回整個裡邊表達的返回值。裡邊的變數都是區域性的,修改不會帶到外邊。舉例子

a=1(a=3; echo $a)

echo a

結果是 3 1

還有個就是圈陣列。。。這個就沒神馬意思了

[ ]:乙個方括號,是bash的命令,查man手冊是可以查到的,跟test一樣,在手冊裡可以看到很多用法。比如-b -c -gt -eq 什麼的很多,還有用-a表示與,-o表示或等等

[[ ]]:一對方括號是乙個方括號的加強版,則是shell的保留字,裡邊支援了 || && 等等這些符號。一般我喜歡用這個.

使用[[ ... ]](而不是[ ... ])條件判斷結構;能夠防止指令碼中的許多邏輯錯誤.比如,&&, ||, <,和》 操作符能夠正常存在於[[ ]]條件判斷結構中, 但是如果出現在[ ]結構中的話,會報錯;

是shell內嵌的命令 使用的是/usr/bin/test

還有相對複雜的

幾個用處,區分變數,如:

var=abcd; echo $efg;

這樣,bash就不會認為變數是varefg了

還有用來擷取字串的 $語法比較靈活多變,這裡不做多解釋,大家有興趣可以自己去搜搜資料,一般我指令碼用到的字串處理,這個都能搞定了。

**塊。用來區分**的,但是跟( )有個區別,就是在末尾要加上;

1.$

2.$(cmd)

3.() 和 {}

1.$是shell中的原形變數,我們常見的形式是

$var

如: $ var=test

$ echo $var

test

但是這樣不能在變數後隨意新增字元

如: $varaa

就會出錯

這時,可以用原形$aa

testaa

這個特性可以利用來批量修該字尾名

檔案為:rename.sh

#! /bin/bash

extension=$1

for filename in `find . -type f`

do mv $filename $.$extension

done

使用 $ ./rename.sh c可把全部檔案修改為.c檔案

2.$(cmd)是命令替換

如: $ ls 

d e f

$ echo $(ls)

d e f

這個應該這樣理解,先是執行$(ls),這個的標準輸出來替換$(ls)的位置,作為echo  的引數,即echo d e f

注:這個和``這個是一致的,看個人習慣了

有一點是只有標準輸出才能被替換,錯誤輸出不能被替換

3.() 和 {}

這兩個都是對一串命令的執行,但有些區別

1.()只是對一串命令重新開乙個子程序進行執行

{}是在當前程序執行

2.()和{}內的命令都是以;隔開

()最後乙個命令可以不用分號;

{}最後乙個分號需要

3.()第乙個命令不需要和括號間有空格

{}第乙個命令和左邊的括號間有空格

對於1:

$ var=10

$ (var=20;echo $var)

20 $ echo $var

10 說明()中執行的語句沒有呼叫當前的變數,所以是在子程序中實現

$ var=30

$ #第乙個要有空格哦

40 $ echo $var

40 說明var被修改了,是在同乙個程序中實現

Bash Shell 裡的各種括號

今天在 segmentfault 上看到又有人問起關於shell裡各種括號的問題。對於很多玩shell的人,括號是個很尷尬的問題,用起來沒問題,說起來不明白,我在這裡總結一下bash shell幾種括號的用法和區別,別的shell我不會。一對圓括號有兩個地方用到。1,for迴圈,for expr1 ...

Bash Shell 裡的各種括號

天在 segmentfault 上看到又有人問起關於shell裡各種括號的問題。對於很多玩shell的人,括號是個很尷尬的問題,用起來沒問題,說起來不明白,我在這裡總結一下bash shell幾種括號的用法和區別,別的shell我不會。一對圓括號有兩個地方用到。1,for迴圈,for expr1 e...

Bash Shell 裡的各種括號

天在 segmentfault 上看到又有人問起關於shell裡各種括號的問題。對於很多玩shell的人,括號是個很尷尬的問題,用起來沒問題,說起來不明白,我在這裡總結一下bash shell幾種括號的用法和區別,別的shell我不會。一對圓括號有兩個地方用到。1,for迴圈,for expr1 e...