Shell 括號總結
1. 單小括號()
I. 命令替換,等同於`command
`
echo $(ls)
echo `ls`
II. 子shell命令組合(command1; command2; [command3..])
(ls; pwd;)
III. 初始化陣列
array=(a b c d)
declare -a array='([0]="a" [1]="b" [2]="c" [3]="d")'
2. 雙小括號 (( ))
I. 數值運算
只要括號中的運算子、表示式符合C語言運算規則,都可用在$((exp))中
echo $((16#5f))
II. 算數比較
雙括號中的變數可以不使用
$
符號字首。括號內支援多個表示式用逗號分開。 只要括號中的表示式符合C
語言運算規則,比如可以直接使用for((i=0;i<5;i++))
, 如果不使用雙括號, 則為for i in
`seq 0 4
`或者for i in {0..4}
。再如可以直接使用if (($i<5))
, 如果不使用雙括號, 則為if [ $i -lt 5 ]
#求100以內的偶數
#! /bin/bash
num=2
while ((num<100)) #數值與運算子可以沒有空格,變數的使用時也可以不使用$num
do
echo "$num"
((num=num*2))
done
- 迴圈中的自加,變數間的運算都可以使用
(())
3. 單中括號[ ]
I. 件屬性測試
運算子 | 說明 | 舉例 |
---|---|---|
-b file | 檢測檔案是否是塊裝置檔案,如果是,則返回 true。 | [ -b $file ] 返回 false。 |
-c file | 檢測檔案是否是字元裝置檔案,如果是,則返回 true。 | [ -c $file ] 返回 false。 |
-d file | 檢測檔案是否是目錄,如果是,則返回 true。 | [ -d $file ] 返回 false。 |
-f file | 檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。 | [ -f $file ] 返回 true。 |
-g file | 檢測檔案是否設定了 SGID 位,如果是,則返回 true。 | [ -g $file ] 返回 false。 |
-k file | 檢測檔案是否設定了粘著位(Sticky Bit),如果是,則返回 true。 | [ -k $file ]返回 false。 |
-p file | 檢測檔案是否是有名管道,如果是,則返回 true。 | [ -p $file ] 返回 false。 |
-u file | 檢測檔案是否設定了 SUID 位,如果是,則返回 true。 | [ -u $file ] 返回 false。 |
-r file | 檢測檔案是否可讀,如果是,則返回 true。 | [ -r $file ] 返回 true。 |
-w file | 檢測檔案是否可寫,如果是,則返回 true。 | [ -w $file ] 返回 true。 |
-x file | 檢測檔案是否可執行,如果是,則返回 true。 | [ -x $file ] 返回 true。 |
-s file | 檢測檔案是否為空(檔案大小是否大於 0),不為空返回 true。 | [ -s $file ] 返回 true。 |
-e file | 檢測檔案(包括目錄)是否存在,如果是,則返回 true。 | [ -e $file ] 返回 true。 |
fpath="/etc/passwd"
if [ -e $fpath ]; then
echo File exits;
else
echo Does not exit;
fi
II. 算數比較
Test和[]中可用的比較運算子只有==和!=,兩者都是用於字串比較的,不可用於整數比較,整數比較只能使用-eq,-gt這種形式。無論是字串比較還是整數比較都不支援大於號小於號。如果實在想用,對於字串比較可以使用轉義形式
[ $var1 -ne 0 -a $var2 -gt 2 ] # 使用邏輯與 -a
[ $var -eq 0 ] # 當 $var 等於 0 時,返回真
if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
III. 字元範圍。用作正規表示式的一部分,描述一個匹配的字元範圍
cat 1.txt |grep [a-zA-Z]
IV. 陣列元素引用
echo ${array[0]}
echo ${array[@]}
4. 雙中括號
I. 字串比較
[[ ]]
結構比[ ]
結構更加通用,其中的所有字元都不會發生檔名擴充套件或單詞分割的問題,並且在其中可以使用萬用字元,比如[[ hello == hell? ]]
,結果為真。[[ ]]
中匹配字串或萬用字元,不需要引號
if [[ $a != 1 && $a != 2 ]]
if [[ hello == hell? ]]
運算子 | 意義 |
---|---|
[[ $str1 != $str2 ]] | 如果 str1 與 str2 不相同,則返回真 |
[[ -z $str1 ]] | 如果 str1 是空字串,則返回真 |
[[ -n $str1 ]] | 如果 str1 是非空字串,則返回真 |
II. 避免邏輯錯誤
使用
[[ ... ]]
條件判斷結構,而不是[ ... ]
,能夠防止指令碼中的許多邏輯錯誤,&&、||、<和>
運算子能夠正常存在於[[ ]]
條件判斷結構中,但是如果出現在[ ]
結構中的話,會報錯
if [[ $a != 1 && $a != 2 ]]
5. 大括號
I. 大括號擴充套件
- 第一種:對大括號中的以逗號分割的檔案列表進行擴充。
- 第二種:對大括號中以
(..)
分割的順序檔案列表起擴充作用
# ls {ex1,ex2}.sh
ex1.sh ex2.sh
# ls {ex{1..3},ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh
# ls {ex[1-3],ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh
II. 字串提取和替換${var:num},${var:num1:num2},${var/pattern/pattern},${var//pattern/pattern}
III. 字元大小寫轉換
${var^^}:把var中的所有小寫字母轉換為大寫
${var,,}:把var中的所有大寫字母轉換為
IV. 命令組合
{ cmd1;cmd2;cmd3;}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2035/viewspace-2823495/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux Shell中各種括號用法總結!Linux
- Unix各種括號的用法總結
- Linux Shell 雙括號運算子使用Linux
- 理解正規表示式中的括號 (),方括號 [] 和大括號 {}
- shell指令碼之特殊符號總結性梳理指令碼符號
- 資料結構括號匹配問題資料結構
- shell總結
- 括號畫家
- 【棧】括號匹配
- SHell命令總結
- c++物件建立帶括號與無括號的區別C++物件
- JavaScript中圓括號()和方括號[]的一個特殊用法JavaScript
- 括號匹配檢驗 資料結構運用資料結構
- Swift之花括號Swift
- 最長有效括號
- 【題解】括號序列
- SHELL字串使用總結字串
- shell指令碼總結指令碼
- 正則中括號點符號符號
- JSON 字串中的中括號和大括號區別詳解JSON字串
- JavaScript 函式呼叫時帶括號和不帶括號的區別JavaScript函式
- Shell總結01-Shell直譯器
- Matlab中的括號()[]{}Matlab
- 每日一題: 有效括號每日一題
- 20. 有效的括號
- Linux shell命令總結Linux
- shell學習總結-4
- shell學習總結-1
- shell學習總結-2
- shell學習總結-3
- shell字串處理總結字串
- [leetcode]有效的括號LeetCode
- [PHP字串]②--花括號{}的作用PHP字串
- ACM 括號配對問題ACM
- 22. 括號生成-c++C++
- 力扣 22. 括號生成力扣
- [C++]括號使用小技巧C++
- 學習筆記八:vue之事件繫結加不加括號筆記Vue事件