1. 程式人生 > >Linux Shell特殊字元和控制字元大全

Linux Shell特殊字元和控制字元大全

# 註釋

表示註釋   #註釋
在引號中間和\#等表示#本身
echo ${PATH#*:} # 引數替換,不是一個註釋
echo $(( 2#101011 )) # 數制轉換,不是一個註釋

; 分隔

命令分隔,在一行中寫多個命令  echo "aa" ; echo "bb"
在條件中的if和then如果放在同一行,也用;分隔

;; case條件的結束

. 命令

相當於source命令

命令:source
檔名的字首,隱藏檔案
目錄:.當前目錄,..父目錄
正則表示式:匹配任意單個字元

“”

部分引用 支援萬用字元擴充套件

’ ‘

全引用,不進行萬用字元擴充套件

\

轉義

/

目錄分隔符

,

多個命令都被執行,但返回最後一個

`

後置引用

: 操作符

  • 空操作
  • 死迴圈: while :
  • 在if/then中表示什麼都不做,引出分支
  • 設定預設引數: : ${username=whoami}
  • 變數替換: : HOSTNAME? {USER?} ${MAIL?}
  • 在和 > (重定向操作符)結合使用時,把一個檔案截斷到0 長度,沒有修改它的許可權;如果檔案在之前並不存在,那麼就建立它.如:
    : > data.xxx #檔案”data.xxx”現在被清空了. 與 cat /dev/null >data.xxx 的作用相同 然而,這不會產生一個新的程序,因為”:”是一個內建命令.
    -在和>>重定向操作符結合使用時,將不會對想要附加的檔案產生任何影響.
    如果檔案不存在,將建立.

*

  • 匹配0個或多個字元;
  • 數學乘法;
  • **冪運算

? 匹配任意一個字元;但在((a>b?a:b))表示c語言中的三目運算

$

取變數的值 echo $PATH
正則表示式中表示行的結尾
${} 引數替換 ${PAHT}
$* 所有引數
$# 引數個數
$$ 程序的ID
$? 程序的返回狀態

( )

命令組,在一個子Shell中執行   (a=3;echo $a) 其中定義的變數在後面不可用
陣列初始化: array=(a,b,c)

{ } 程式碼塊,即一個匿名函式,但其中定義的變數在後面依然可用

{ } \; 用在find的-exec中 $find -name *.txt -exec cat {} \;

[ ]

  • 測試 [-z $1]
  • 陣列元素 a[1]=’test’
  • [[]]表示測試 使用[[ … ]]條件判斷結構, 而不是[ … ], 能夠防止指令碼中的許多邏輯錯誤. 比如, &&, ||, <, 和> 操作符能夠正常存在於[[ ]]條件判斷結構中, 但是如果出現在[ ]結構中的話, 會報錯.
  • (( ))數學運算
  • 在正則表示式中表示範圍 [a-z]

< << > 重定向和程序替換 ls -al > a.txt

< 還用在ASCII比較 if [[ “ veg1"<" veg2” ]]

\<,> 正則表示式中的單詞邊界.如:bash$grep ‘\

| 管道

| 強制重定向(即使設定了noclobber 選項–就是-C 選項).這將強制的覆蓋一個現存檔案.

|| 邏輯或操作 ;用在兩個命令之間的時候,表示在前一個命令結束時,若返回值為 false,繼續執行下一個命令

&& 邏輯與;用在兩個命令之間的時候,表示在前一個命令結束時,若返回值為 true,繼續執行下一個命令

& 後臺執行

-

  • 引數選項
  • 減號
  • 重定向stdin和stdout:cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)
  • 先前的工作目錄 cd -

    注:使用-開頭的檔名和變數名可能會出現一些問題

+ 一個命令或者過濾器的選項標記.

~ home目錄

~+ 當前工作目錄

~- 先前工作目錄

^ 正則表示式中表示行首

$IFS 用來做一些輸入命令的分隔符, 預設情況下是空白.