跳轉到內容

Bash Shell 指令碼/符號索引

來自 Wikibooks,開放書籍,開放世界
符號 解釋
!
  • 邏輯否定管道退出狀態。例如,如果 grep YES votes.txt 返回 0,則 ! grep YES votes.txt 返回 1,但在其他方面等效。
  • 也由 [ ... ] 內建函式和條件表示式支援。例如,如果 [[ -e file.txt ]] 為真,則 [[ ! -e file.txt ]] 為假。
  • 也支援算術表示式。例如,如果 $i 非零,則 $(( ! i ))0
  • 另請參閱下文中的 #!
"…"
  • 引用一個引數(或引數的一部分),以便它不會被空格拆分為多個引數,但不會阻止引數擴充套件和命令替換在內部進行。
  • 另請參閱下文中的 $"…"
#
  • 引入註釋(一直持續到行尾)。例如,命令 foo bar baz # bip 等效於命令 foo bar baz,因為註釋 # bip 被刪除了。
  • 在算術表示式中,形式為 b#n 的整數字面量被解釋為 b 進位制。例如,2#110110 是二進位制 110110,即 54。
  • 另請參閱下文中的 #!
  • 另請參閱下文中的 $#
#!
  • (通常在讀的時候稱為 "shebang"。)用於可執行指令碼的開頭,指定用於執行指令碼的直譯器。例如,如果 script.pl 的第一行是 #!/usr/bin/perl,並且 script.pl 具有可執行許可權,那麼 ./script.pl 幾乎等效於 /usr/bin/perl ./script.pl
  • Bash 指令碼的第一行通常是 #!/bin/bash#!/bin/sh。(前者通常被認為更可取。)
$
  • 引入各種型別的擴充套件,尤其是引數擴充套件(如 $var${var})、命令替換(如 $(command))和算術擴充套件(如 $((expression)))。
$"…"
  • "…"(見上文)的一種變體,它支援特定於區域設定的翻譯。(除非您正在編寫用於多種語言(例如英語和法語)的指令碼,否則您不必擔心這一點。)
$#
  • 位置引數(指令碼或函式的引數)的數量。例如,如果一個指令碼被呼叫為 script.sh a b c,那麼 $# 將是 3。修改位置引數的內建函式(如 shiftset)也會影響 $#
% 模運算子。返回整數除法所得的餘數。例如 5%2 = 1
& 與號。通常用於在後臺啟動命令。例如 Firefox &
' 單引號。用於逐字引用文字。
( 左括號。用於表示子 shell 的開始,等等。
) 右括號。用於表示子 shell 的“EOF”。
* 星號。表示乘法。例如 5*2 = 10
+ 加號。表示加法。例如 5+2 = 7
, 逗號。用於分隔。例如 ls file{1,2,3}
- 連字元。表示減法。例如 5-2 = 3
. 句號。
/ 正斜槓。表示整數除法(例如 5/2=2)或路徑的一部分(例如 /home/user)
: 冒號。
; 分號。如果不存在換行符/EOL,則分隔行。例如 echo hello; echo world
< 左尖括號。用於輸入重定向
= 等號。用於賦值變數並檢查相等性
> 右尖括號。用於輸出重定向。
? 問號。
@ at 符號。通常用作包含傳遞給環境的所有引數的變數,如 $@
[ 左方括號。用作 test 的更具視覺吸引力的替代方法。例如,if [ condition ] ; then 等等
\ 反斜槓。最常用於轉義。例如 rm file\ with\ a\ bunch\ of\ spaces.txt
] 右方括號。關閉測試外殼
^ 脫字元。
_ 下劃線。
`…`
  • 觸發命令替換;等效於 $(…),但更容易出錯。
{ 左大括號。用於特定變數擴充套件。例如(其中 var = "hello ")echo "${var}world" 將列印 "hello world",echo "$varworld" 將生成一個錯誤,期望一個名為 varworld 的變數。
| 管道。用於將輸入重定向到輸出。具體來說,它將左側命令的輸出作為輸入,執行右側的程式,然後將第一個命令輸出的內容傳遞給第二個命令,就好像它是在鍵盤上輸入的。'ls -l | grep Desk' 等效於執行 "grep Desk",然後手動輸入 ls -l 的輸出。然後,每次按下回車鍵都會觸發 grep,直到按下 ^D 以傳遞 EOF。
} 右大括號。
~ 波浪號。通常用於引用主目錄。以 "mrwhite" 登入,cd ~(或只用 cd)將轉到 /home/mrwhite。以其他使用者登入,可以使用 'cd ~mrwhite' 獲得相同的效果。
華夏公益教科書