# 井號 Hashtag |
comments 註解 |
symbol |
#!/bin/bash |
第一行, 宣告這個 script 使用的 shell 名稱 |
# 井號 Hashtag |
comments 註解 |
symbol |
# This line is comments |
出現在一行的開頭,或者位於完整指令之後,表示符號後面的是註解文字,不會被執行 |
# 井號 Hashtag |
comments 註解 |
symbol |
echo "a = $a" # a = 0 |
出現在一行的開頭,或者位於完整指令之後,表示符號後面的是註解文字,不會被執行 |
# 井號 Hashtag |
comments 註解 |
symbol |
echo "a = $a" # a = 0 |
出現在一行的開頭,或者位於完整指令之後,表示符號後面的是註解文字,不會被執行 |
# 井號 Hashtag |
comments 註解 |
symbol |
|
在指令中,或者引號雙引號括住的話,或者在倒斜線的後面,變成一般符號 |
~ 波浪號 Tilde |
帳戶的 home 目錄 |
symbol |
cd ~ |
帳戶的 home 目錄 |
~ 波浪號 Tilde |
帳戶的 home 目錄 |
symbol |
cd ~user |
user 帳戶的 home 目錄 |
~ 波浪號 Tilde |
帳戶的 home 目錄 |
symbol |
~/bin |
路徑的一部份 |
~+ |
當前的工作目錄 |
symbol |
# echo ~+/var/log |
當前的工作目錄 (=pwd) |
~- |
上次的工作目錄 |
symbol |
# echo ~-/etc/httpd/logs |
上次的工作目錄 |
; 分號 semicolon |
Command separator: Run cmd1 then cmd2 |
symbol |
cd ~/backup ; mkdir startup ;cp ~/.* startup/. |
|
;; 連續分號 |
Terminator |
symbol |
case "$fop" in help) echo "Usage: Command -help -version filename" ;; version) echo "version 0.1" ;; esac |
專用在 case 的選項,擔任 Terminator 的角色 |
. dot 點 |
當前目錄 |
symbol |
CDPATH=.:~:/home:/home/web:/var:/usr/local ; ls . |
等號後的 dot 代表的就是當前目錄 |
.. dot 點 |
上層目錄 |
symbol |
ls .. |
|
. dot 點 |
檔案名稱以 dot 開頭,屬特殊檔案 |
symbol |
|
dot 開頭特殊檔案名稱, 用 ls 指令必須加上 -a 選項才會顯示 |
. dot 點 |
一個 dot 代表匹配一個字元 |
symbol regularexpression |
|
|
'string' 單引號 single quote |
一般符號處理,防止任何變量替換 |
symbol |
heyyou=home echo '$heyyou' |
get $heyyou |
"string" 雙引號 double quote |
被雙引號用括住的內容,將被視為單一字串。它防止通配符擴展,但允許變量擴展 |
symbol |
heyyou=home echo "$heyyou" |
\get home |
`commands` 倒引號 backticks |
作爲命令執行, 類似於$() |
symbol |
echo `ls` ; echo $(ls) |
|
, 逗號(comma) |
在運算當中當做"區隔"用途 |
symbol |
a=1 b=2 ((a++, b++)) echo $a echo $b |
|
/ 斜線(forward slash) |
在路徑表示時,代表目錄 |
symbol |
cd /etc/sysconfig/ |
|
/ 斜線(forward slash) |
單一的斜線表示系統根目錄 |
symbol |
ls / |
|
~ 波浪號 Tilde |
帳戶的 home 目錄 |
symbol |
cd ~ |
帳戶的 home 目錄 |
/ 斜線(forward slash) |
四則運算中,表示除法 |
symbol 運算 |
let "var=25/5" echo $var #輸出5 |
|
反斜槓, 倒斜線 |
放在指令前,表示取消alias作用 |
symbol |
\ls |
|
反斜槓, 倒斜線 |
放在特殊符號前,則該特殊符號的作用消失,表示轉義 |
symbol |
\echo "\"abc\"" |
"abc"; echo "abc" abc |
反斜槓, 倒斜線 |
反斜槓放在指令的末端,表示指令鏈接下一行 |
symbol |
ls /etc/ -la |
|
\<...> 單字邊界 |
被定義為"邊界"的意思 |
symbol 規則表達式 |
grep '\' FileA |
|
豎線(pipeline) |
管道,連接上個指令的標準輸出,作爲下個指令的標準輸入 |
symbol |
ls -la \ |
wc -l |
|
! 感嘆號(negate or reverse) |
反邏輯的作用,如:條件語句中,表示 不等於 |
symbol |
if [ $var != 2 ]; then echo "not equal" |
|
! 感嘆號(negate or reverse) |
正則表達式中,表示反邏輯 |
symbol |
ls a[!0-9] |
|
: 冒號 colon |
內建指令,表示:什麼都不做,但返回值爲0 |
symbol |
: ; echo $? |
get 0, ? 表示任意單個字符,但不包括null字符 |
? 問號 question mark |
在文件名擴展上,表示任意單個字符,但不包括null字符 |
symbol |
ls a?a |
|
* 星號 Asterisk |
在文件名擴展上,表示任意多個字符,包括null字符 |
symbol |
ls a* |
|
* 星號 Asterisk |
運算時,代表乘法 |
symbol 運算 |
let "var = 3 * 4"; echo $var |
get 12 |
** |
運算時,代表次方運算 |
symbol 運算 |
let "var=2**3"; echo $var |
get 8 |
$ 美元符號(dollar sign) |
變量替換 |
symbol |
var=3; echo $var |
get 3 |
$ 美元符號(dollar sign) |
正則表達式中,美元符號表示行結束符 |
symbol 正則表達 |
|
|
${} |
變量的正規表達式 |
symbol 正則表達 |
${parameter:-word} |
使用默認值word來代替那些空的或者沒有複製的變量 |
$* |
所有引用變量的符號 |
symbol |
$0, $1, $2, $3, $4, $5, $6, $7, $8, $9, ${10}, ${11}.... ;echo "$*" |
引用script的執行引用變量; 所有引用變量 |
$@ |
保留每個引用變量的區段觀念 |
symbol |
|
|
$# |
引用變量的數量 |
symbol |
echo "$#" |
引用變量的總數量是多少 |
$? |
狀態值(status variable) |
symbol |
echo "$?" |
表示指令的結果碼,0表示正常,非0表示異常 |
$$ |
當前進程的pid |
symbol |
echo "$$" |
|
$- |
顯示shell使用的當前選項 |
symbol |
|
|
$! |
最後一個後臺運行的進程ID |
symbol |
|
|
$() |
|
|
echo $(ls) |
=echo `ls` |
() 圓括號 parentheses |
指令羣組,command group |
symbol |
(cd ~ ; vcgh=pwd ;echo $vcgh) |
shell會以產生 subshell來執行這組指令。因此,在其中所定義的變數,僅作用於指令羣組本身。 |
() 圓括號 parentheses, round brackets |
array 變數的定義 |
symbol |
|
|
() 圓括號 parentheses, round brackets |
需要加上escape字元才能使用的場合,如運算式 |
運算式 |
|
|
(()) 雙圓括號 double parentheses |
作用與 let 指令相似,用在算數運算上 |
symbol 算數運算 |
var=1; ((++var)); echo $var |
get 2 |
+ |
表示"很多個"的前面字元 |
symbol 正則表達式 |
grep '10+9' fileB |
get 109 1009 100009 1000093 1010009 |
{} 大括號 braces, curly brackets |
block of code, 腳本中,大括號中夾雜着一段或幾段以分號做結尾的指令或變量 |
symbol |
|
在當前shell執行,不會產生subshell |
{} 大括號 braces, curly brackets |
在函數的功能上,廣義的講,單純只使用大括號時,作用就像是個沒有指定名稱的函數一樣 |
symbol 函數 |
|
|
{xx,yy,zz,…} |
字串的組合 |
symbol |
mkdir {userA,userB,userC}-{home,bin,data} |
得到 userA-home, userA-bin, userA-data, userB-home, userB-bin,userB-data, userC-home, userC-bin,userC-data,這幾個目錄 |
{xx,yy,zz,…} |
字串的組合 |
symbol |
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}} |
|
[] 中括號 brackets, square brackets |
在流程控制中,用於括住判斷式, 可理解爲指向test命令的一個軟鏈接 |
symbol |
if [ -z $var ]; then fi |
|
[] 中括號 brackets, square brackets |
正則表達式中,表示範圍或集合 |
symbol 正則表達式 |
ls abc[1-9] |
|
[[]] |
與[] 作用類似,允許使用\ |
\ |
(or) && (and) 邏輯等符號 |
symbol |
var=5; if [[ $var > 4 ]]; then echo "large"; fi; |
|
& |
指令在背景執行; Run cmd in a subshell |
run |
my-script.sh &; tar cvfz data.tar.gz data > /dev/null& |
|
& |
指令在背景執行; Run cmd in a subshell |
symbol |
my-script.sh & |
|
&& |
第一道指令執行成功後, 才會執行第二道指令; Run cmd2 if cmd1 is successful |
run |
make && make install |
|
&& |
邏輯符號 and |
symbol logic |
|
|
\ |
|
管線的符號, 即是將第一道指令的輸出, 作為第二道指令的輸入 |
run |
ls \ |
grep filename |
|
\ |
\ |
|
第一道指令執行失敗後, 才會執行第二道指令; Run cmd2 if cmd1 is not successful |
run |
cat filename \ |
\ |
echo "fail" |
|
\ |
\ |
|
邏輯符號 or |
symbol logic |
|
|
+ |
+ 加號(plus) |
symbol 運算表達式 |
expr 1 + 2 + 3 |
|
- |
減號 (dash) |
symbol 運算表達式 |
let "var=5-3"; let "var=5-3" |
|
- |
選項符號 |
symbol |
ls -la |
|
- |
GNU指令中,如果單獨使用-,不加任何該加的文件名稱時,代表標準輸入的意思 |
symbol GNU指令 |
tar xpvf - |
#代表從標準輸入讀取資料 |
- |
回到上次目錄 |
symbol cd 指令 |
cd - |
回到上次目錄 |
% 百分號 Percent sign |
modulo 取模, 餘數 |
symbol |
expr 10 % 2 |
# 輸出0 |
% |
匹配 |
symbol 規則表達式 |
${parameter%word}${parameter%%word} |
最短的 word 匹配 |
%% |
匹配 |
symbol 規則表達式 |
${parameter%word}$${parameter%%word} |
最長的 word 匹配 |
= 等號(equals) |
變量賦值,PATH設定 |
symbol |
var=3; export JAVA_HOME=/usr/local/java |
|
== 雙等號 |
等於 |
symbol 條件表達式 |
if [ $var1 == $var2 ]; ... |
|
!= |
不等於 |
symbol 條件表達式 |
if [ $var1 != $var2 ]; ... |
表示不等於 |
^ 上尖括號 Upper angle brackets 脫字符 |
行首, 代表行的 "開頭" 位置 |
symbol 正則表達式 |
|
|
^ 上尖括號 Upper angle brackets 脫字符 |
在[]中,表示非, 與"!"(嘆號)一樣表示「非」 |
symbol 正則表達式 |
|
|
> is more than |
追加 |
symbol 輸出/輸入 |
ls > a.txt |
#追加操作 |
> is more than |
追加 |
symbol 輸出/輸入 |
cmd > file |
把cmd命令的輸出重定向到文件file中。如果file已經存在,則清空原有文件,使用bash的noclobber選項可以防止復蓋原有文件 |
>> |
創建 |
symbol 輸出/輸入 |
ls >> a.txt |
#創建操作 |
>> |
創建 |
symbol 輸出/輸入 |
lcmd >> file |
把cmd命令的輸出重定向到文件file中,如果file已經存在,則把信息加在原有文件後面 |
>> |
創建 |
symbol 輸出/輸入 |
ls 1>>/dev/null 2>>&1 |
|
0-9 |
用一個數字(通常為0-9)來表示一個文件 |
symbol 輸出/輸入,文件描述符(File Descriptor) |
|
|
0 |
標準輸入 stdin 鍵盤 |
symbol 輸出/輸入, 文件描述符(File Descriptor) |
|
|
1 |
標準輸出 stdout 螢幕 |
symbol 輸出/輸入, 文件描述符(File Descriptor) |
|
|
2 |
標準錯誤輸出 stderr 螢幕 |
symbol 輸出/輸入, 文件描述符(File Descriptor) |
|
|
0< |
|
symbol 輸出/輸入, 文件描述符(File Descriptor) |
|
|
1> |
|
symbol 輸出/輸入, 文件描述符(File Descriptor) |
|
|
< is less than |
輸出/輸入重導向 |
symbol 輸出/輸入 |
cmd < file |
使CMD(命令提示字元) |
<< |
輸出/輸入重導向 |
symbol 輸出/輸入 |
cmd << text |
從命令行讀取輸入,直到一個與text相同的行結束, 除非使用引號把輸入括起來,此模式將對輸入內容進行shell變量替換 |
<< |
輸出/輸入重導向 |
symbol 輸出/輸入 |
"<<-text" |
從命令行讀取輸入,直到一個與text相同的行結束, 使用引號把輸入括起來,忽略接下來輸入行首的tab,結束行也可以是一堆tab再加上一個與text相同的內容 |
<<< |
輸出/輸入重導向 |
symbol 輸出/輸入 |
cmd <<< word |
把word(而不是文件word)和後面的換行作為輸入提供給cmd |
< |
|
symbol 輸出/輸入 |
cmd <> file |
以讀寫模式把文件file重定向到輸入,文件file不會被破壞。僅當應用程式利用了這一特性時,它才是有意義的 |
> |
|
symbol 輸出/輸入 |
cmd >\ |
file |
功能同>,但即便在設置了noclobber時也會復蓋file文件,注意用的是\ |
而非一些書中說的!,目前僅在csh中仍沿用>!實現這一功能 |
> |
|
symbol 輸出/輸入 |
> filename |
把文件"filename"截斷為0長度.# 如果文件不存在, 那麼就創建一個0長度的文件(與'touch'的效果相同). |
> |
|
symbol 輸出/輸入 |
cmd >&n |
把輸出送到文件描述符n |
> |
|
symbol 輸出/輸入 |
cmd m>&n |
把輸出 到文件符m的信息重定向到文件描述符 |
> |
|
symbol 輸出/輸入 |
cmd >&- |
關閉標準輸出 |
< |
|
symbol 輸出/輸入 |
cmd <&n |
輸入來自文件描述符n |
< |
|
symbol 輸出/輸入 |
cmd m<&n |
使m來自文件描述符 n |
< |
|
symbol 輸出/輸入 |
cmd <&- |
關閉標準輸入 |
< |
|
symbol 輸出/輸入 |
cmd <&n- |
移動輸入文件描述符n而非複製它,即在複製n到cmd後關閉當前shell 中原有的n |
> |
|
symbol 輸出/輸入 |
cmd >&n- |
移動輸出文件描述符 n而非複製它,即在複製n到cmd後關閉當前shell 中原有的n |
>& |
複製文件描述符 |
symbol 輸出/輸入 |
cmd > file 2>&1 |
|
>& |
複製文件描述符 |
symbol 輸出/輸入 |
cmd 2>&1 >file |
|
|
|
symbol |
|
|
|
|
symbol |
|
|
|
|
symbol |
|
|
|
|
symbol |
|
|
|
|
symbol |
|
|
|
|
symbol |
|
|
|
|
symbol |
|
|
|
|
symbol |
|
|
|
|
symbol |
|