shell編程中的括號大致有五種,分別是 (), [], (()), [[]], {} 接下來簡單的介紹以下它們的用法:
- ()
- 放置命令,格式$(cmd),如同`cmd` 。
解釋器遇到這種格式,會先執行命令,得到結果再輸出。 - 初始化數組 array=(1 2 3 4)
- (())
- 算術運算 $((3*3+4*4))
- 重定義
var=100
((var=101))
echo $var
- 算術比較
((var==404)) && echo "not found" #如果var是404,輸出not found
- []
- 條件判斷 , 可用test替代
var=404
if [ $var -eq 404 ] ##和下面一樣意思一樣
# if test $var -eq 404
then
echo "not found "
else
echo "hi"
fi
- 正則表達式的一部分
- 數組
- [[]]
條件判斷,那和[] test 有什麼區別呢?
- &&、||、< 和 > 只能在[[]]中正常使用,如果放到[]中會報錯。
- [[]] 支持算術擴展
- [[]] 支持字符串模式匹配,[]不支持。
var="nice"
if [[ $var == nic? ]]
then
echo "nice " #輸出nice
else
echo "hi"
fi
if [[ 1+2 -eq 3 ]]
then
echo "yes" #輸出yes
else
echo "no"
fi
所以判斷條件,儘量用[[]],而不是[]
- {}
- 代碼塊,和()是由區別的
-
- {}中不會開新進程,()會開,所有腳本里的變量在()是用不了的,但{}可以
-
- 格式問題,{ cmd;cmd;} (cmd;cmd) ,{}左邊必須空格開頭,並且cmd後面必須加;
其餘的就是和字符串相關的操作
字符串的替換和截斷
${var:-string},${var:+string},${var:=string},${var:?string}
${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
${var:num},${var:num1:num2}