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...