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


1.(())使用語法:
((表達式))用來擴展Shell中的算術運算,以及賦值運算,擴展for,while,if條件測試運算.

注意點:
1.在雙括號結構中,所有的表達式可以像c語言一樣,如a++,b--
2.在雙括號結構中,所有變量可以不加入$符號前綴,也可以加入.
3.在雙括號可以進行邏輯運算,四則運算,而且運算符合數值之間可以沒有空格,也可以有空格.
4.雙括號結構擴展了for,while,if條件測試運算.
5.支持多個表達式運算,各個表達式之間用逗號,分開.
6.使用[]時必須保證運算符與數值之間有空格,而(())時數值與運算符可以沒有空格.

小技巧:
1.新建(()).sh文件vim "(()).sh",因為()在shell中有特殊含義,只能用"括起來,用單引號也是不行的.
2.使用文件時:vim \(\(\)\).sh,可以在要使用的含有特殊符號的文件前面添加一個轉義符號\然后可以按提示按補全.

例子:求100以內的偶數
#! /bin/bash

num=2

while ((num<100)) #數值與運算符可以沒有空格,變量的使用時也可以不使用$num
do
echo "$num"
((num=num*2))
done
1
2
3
4
5
6
7
8
9
結果:

[root@yveshe ~]# ./\(\(\)\).sh
2
4
8
16
32
64

2.()和{}

多條命令執行

(1)單小括號,(cmd1;cmd2;cmd3) 新開一個子shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最后一個命令后可以沒有分號。

(2)單大括號,{ cmd1;cmd2;cmd3;} 在當前shell順序執行命令cmd1,cmd2,cmd3, 各命令之間用分號隔開, 最后一個命令后必須有分號, 第一條命令和左括號之間必須用空格隔開。
對{}和()而言, 括號中的重定向符只影響該條命令, 而括號外的重定向符影響到括號中的所有命令。

1)${a} 變量a的值, 在不引起歧義的情況下可以省略大括號。

(2)$(cmd) 命令替換,和`cmd`效果相同,結果為shell命令cmd的輸,過某些Shell版本不支持$()形式的命令替換, 如tcsh。

(3)$((expression)) 和`exprexpression`效果相同, 計算數學表達式exp的數值, 其中exp只要符合C語言的運算規則即可, 甚至三目運算符和邏輯表達式都可以計算。


()和{}都是對一串的命令進行執行,但有所區別:
相同點:
()和{}都是把一串的命令放在括號里面,並且命令之間用;號隔開
不同點
()只是對一串命令重新開一個子shell進行執行,{}對一串命令在當前shell執行
()最后一個命令可以不用分號,{}最后一個命令要用分號
()里的第一個命令和左邊括號不必有空格,{}的第一個命令和左括號之間必須要有一個空格
()和{}中括號里面的某個命令的重定向只影響該命令,但括號外的重定向則影響到括號里的所有命令

3.雙中括號[[ ]]

    ①[[是 bash 程序語言的關鍵字。並不是一個命令,[[ ]] 結構比[ ]結構更加通用。在[[和]]之間所有的字符都不會發生文件名擴展或者單詞分割,但是會發生參數擴展和命令替換。
    ②支持字符串的模式匹配,使用=~操作符時甚至支持shell的正則表達式。字符串比較時可以把右邊的作為一個模式,而不僅僅是一個字符串,比如[[ hello == hell? ]],結果為真。[[ ]] 中匹配字符串或通配符,不需要引號。
    ③使用[[ ... ]]條件判斷結構,而不是[ ... ],能夠防止腳本中的許多邏輯錯誤。比如,&&、||、<和> 操作符能夠正常存在於[[ ]]條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不適用雙括號, 則為if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
    ④bash把雙中括號中的表達式看作一個單獨的元素,並返回一個退出狀態碼。
 

總結:

  (1)$(cmd)與··(鍵盤上1左邊的~)一樣,都是命令替換,可以將執行結果提取出來

  (2)[]使用的時候[  ]前后都必須有空格,且兩個字符或數字之間的比較符左右也必須有空格。

  (3)   []是test的另一種形式,[]中間只能使用= 和 != 比較字符串,如果使用< 、>需要進行轉義\。

    []中間如果比較數字需要用 -lt 等符號,不能使用\<比較數字,會當成字符串處理。

  (4)[[]]可用於處理邏輯命令,也可以用於處理字符串是否相等,且使用<、>不用轉義符.

  (5)(())可用於比較數字,且不用轉義,而且也可以用於數字計算,比較的時候也是用普通的>,<。(())計算的時候運算符與數字之間不能有空格,例如: sum=$(($sum+4))

  (6)字符串比較 用[],與普通的<,>,=,!=符號,如果使用<,>需要轉義;或者使用[[]]比較字符串也是用普通符號不用轉義

    數字比較用[]的時候用-lt,-gt等符號,不能使用\<(因為會當成字符串處理);或者用(())比較數字用普通符號不用轉義

  (7)可以將$理解為取變量的符號,$var 或者 ${}  ,在不影響語義的情況下可以省去{},但是最好寫上{}。例如:test=XXX.$testWWWW.這時候就必須加上{}變為${test}WWWW


免責聲明!

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



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