1 #
# 管理員賬戶
$ 普通賬戶
在腳本中 #也常出現在一行的開頭,或者位于完整指令之后,這類情況表示符號后邊是注解文字,不會被執行
例如
#!/bin/bash
#this line is comments
由于這個特性,當臨時不想執行某行指令時,可以在行首加上#就你可以了
如果被用在指令中,或者引號雙引號擴住的話,或者在反斜線的后面,那他就變成一般的符號了,不具備上述的功能了
——————————————————————————————————-
2 ~ 賬戶的home目錄
代表用戶的home目錄, cd ~ 也可以在后面加上某個用戶的名稱:cd ~ USERNAME,或者當成路徑的一部分:~/bin
~+ 表示當前的工作目錄,這個符號代表當前的工作目錄,這和內嵌的指令pwd的作用是相同的
~- 表示上一次的工作目錄
—————————————————————————————————–
3 ; 分號,command separator
在shell中,擔任連續指令功能的符號
—————————————————————————————————–
4 ;; 連續的分號(terminator)
專用在case條件語句選項中,擔任Terminator的角色
—————————————————————————————————–
5 . 點 dot
在shell中一個.代表當前目錄,兩個..代表上層目錄
—————————————————————————————————–
6 'string' 單引號(single quote)
被單引號括住的內容,將被視為單一字符串。在引號內的代表變數$符號,沒有作用,也就是說,將被視作一般符號處理,放置任何變量替換
"string"雙引號(double quote)
被雙引號括住的內容,將被視為單一字符串,防止通配符的擴展,但允許變量擴展 ,這點與單引號的處理方式不同
`command` 倒引號(backticks)
在前面的單引號,括住的字符串如果是命令,那么命令是不會執行的,會被當作平通字符串處理,如果要執行命令,就要使用倒引號
—————————————————————————————————–
7 , 逗號(comma)
逗號常運用在運算當中當作"區隔"用途
—————————————————————————————————–
8 / 斜線 (forward slash)
在路徑表示時,代表目錄
通常單一的/代表root根目錄的意思,在四則運算中,代表除法符號
—————————————————————————————————–
9 \反斜線
在交互模式下的反斜線有以下幾個作用。
(1)放在指令前面,有取消別名的作用
(2)放在特殊符號前面,則該特殊符號作用消失
(3)放在指令的最末端,表示指令連接下一行。
—————————————————————————————————–
10 | 管道(pipeline)
連接上個指令的標準輸出,作為下個指令的標準輸入。
—————————————————————————————————–
11 ! 驚嘆號(negate or reverse)
通常表示反邏輯的作用,譬如,用!=表示不等于
—————————————————————————————————–
12 : 冒號
在bash中,冒號是一個內建命令:“什么事都不干”,但是返回對狀態值為0。
例1
:${HOSTNAME?}${USER?}${MAIL?}
這一行的作用是,檢查這些環境變量參數是否已經設置,沒有設置的將會以標準錯誤顯示錯誤信息。
例2
寫法一
repeat()
{
while true
do
$@ && return
done
}
寫法二
repeat()
{
while :
do $@ && return
done
}
第一種寫法中的true是作為/bin下的一個二進制文件來實現的,這就意味這每執行一次while循環,shell就不得不生成一個進程。使用shell內建的:命令,它總是返回為0的退出碼,速度比第一種塊很多
除了上述之外,還有一個地方必須使用冒號,在用戶自己的HOME目錄下的.bash_profilehuo或者任何功能相似的檔案中,設定關于PATH的場合中,我們使用冒號來作分隔
—————————————————————————————————–
13 ? 問號(wild card)
在文件名擴展上表示匹配任意一個字符,但不包含null
*星號
在文件名擴展中表示任意字符,包含null
在運算時表示乘法
—————————————————————————————————–
14 $ 錢號 (dollar sign)
變量替換的代表符號
在正則表達式中被定義為"行"的最末端
—————————————————————————————————–
15 ${} 位置變量的表達式
$*
$*引用script的執行引用變量,引用參數的算法與一般指令相同,指令本身為0,其后為1,以此類推,引用變量的代表方式如下 $0,$1,$2,$3,$4,$5,$6,$7,$8,$9,${10},${11},${12}…..
各位數的可以直接使用數字,但是兩位數以上的,則必須使用{}符號括住.
$*則是代表引用變量的符號,使用時,要依據情況加上雙引號,例如 echo "$*"
還有一個與$*具有相同作用的符號,但效果和處理方式有些不同 $@
$@
$@與$*具有相同作用的符號,不過兩者有一個不同點。$*將所有的變量視為一個整體,但是$@則仍保留每個引用變量的區段概念
$#
$#表示引用變量的總數量是多少
$?狀態值(status ariable)
一般來說,Unix like系統的進程以執行系統調用exit()來結束。這個回傳值就是status值?;貍鹘o父進程,來檢查子進程的執行狀態。一般指令執行成功,其回傳值為0;失敗為1
由于進程的ID是唯一的,所以在同一時間,不可能有重復的PID。有時script會需要產生臨時文件,用來存放必要的材料。而此script有可能在同一時間被使用者們使用。在這種情況下,固定文件名的寫法就顯得不可靠。唯有產生動態文件名,才能符合要求。符號$$或許可以符合這種要求。他代表當前shell的PID,使用它來作為文件名的一部分,可以避免在同一時間,產生相同文件名的覆蓋現象
—————————————————————————————————–
16 ( )指令群組(command group)
用括號將一串指令括起來,這種用法對shell來說,成為指令群組。指令群組有一個特性,shell會以產生subshell來執行這組指令。因此,在其中所定義的變量,僅作用于指令群組本身。除了指令群組,括號也用在array變量的定義上,另外也應用在其他可能需要加上escape字符才能使用的場合,例如運算式
(( ))
這組括號的作用于了let指令類似,用在算術運算上,是bash的內建功能。所以,在執行效率上會比使用let指令塊許多
{ } 大括號(Block of code)
有時候script當中會出現,大括號中間夾著一段或幾段以分號作結尾的指令或變量設定。這種用法與上面介紹的指令群組非常相似,但是大括號不會在當前的shell中產生subshell
大括號也被用在"函數"功能上。廣義上說,單純只適用大括號時,作用就像是個沒有指定名稱的函數一般。因此,這樣寫script也是相當好的一件事,尤其對輸入輸出的重定向上,這個做法可以精簡script的復雜的。
此外,大括號還有另一種用法,如下
{xx,yy,zz,…}
這種大括號的組合,常用在子串的組合上,例如
mkdir {userA,userB}-{home,bin,data}
我們得到userA-home,userA-bin,userA-data,userB-home,userB-bin,userB-data這幾個目錄。這組符號在適用性上相當廣泛。再來看個例子
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}
如果不是因為這種用法,我們得寫幾行重復幾次呢?
[ ]中括號
常出現在流程控制中,扮演括住判斷式的作用。if [ "$?" != 0 ];then echo "execute error";exit 1;fi
這個符號在正則表達式中擔任類似范圍的或集合的角色rm -f 200[1234]
[[ ]]
這組符號與先前的[]符號,基本上作用相同,但它允許在其中直接使用||和&&邏輯等符號
—————————————————————————————————–
17 || 邏輯符號
這個代表 or 邏輯的符號
&& 邏輯符號
這個代表 and 邏輯的符號
& 后臺工作
單一個&符號,且放在完整指令列的最末端,即表示將該指令列放入后臺中工作
\<…\> 單詞邊界
這組符號在正則表達式中,被定義為"邊界"的意思。當匹配時匹配整個單詞
+ 加號plus
在運算式中,用來表示加法
在正則表達式中,用來表示匹配前面字元至少一次的意思
– 減號
在運算式中,用來表示"減法",expr 10 – 2
此外也是系統指令的選項符號,ls -la /etc/
在GNU指令中,如果單獨使用 – 符號,不加任何該文件名稱時,代表"標準輸入"的意思。譬如,tar xpvf- 這里的 – 符號代表從標準輸入讀取資料
不過在 cd 指令中比較特別 cd – 這代表變更工作目錄到"上一次"工作目錄。
————————————————————————————
18 % 除法(Modulo)
在運算式中,用來表示除法
此外,也被用在關于變量的正則表達式當中,例如
${parameter%word}${parameter%%word}
一個%表示最短的word匹配,兩個表示最長的word匹配
————————————————————————————
19 = 等號equals
常在設定變量時看到的符號
或者是PATH的設定,設置應用在運算或判斷式等此類用途上
== 等號 equals
常在條件判斷式中看到,代表"等于"的意思
!= 不等于
常在條件判斷式中看到,代表"不等于"
^
這個符號在正則表達式中,代表行的"開頭"位置,在[]中也與"!"一樣表示"非"的意思
————————————————————————————
20 輸入/輸出重定向
> >> < << :> &> 2&> 2<>>& >&2
文件描述符(file descriptor),用一個數字(通常為0-9)來表示一個文件。常用的文件描述符如下
文件描述符 名稱 常用縮寫 默認值
0 標準輸入 stdin 鍵盤
1 標準輸出 stdout 屏幕
2 標準錯誤輸出 stderr 屏幕
我們在簡單的使用 < 或 > 時,相當于使用 0< 或 1>
cmd > file
把cmd命令的輸出重定向到文件file中。如果file已經存在,則清空原有文件
cmd >> file
把cmd命令的輸出重定向到文件file中,如果file文件已經存在,則把信息追加到file中
cmd < file
使cmd命令從file中讀入
cmd << text
從命令行讀取輸入,直到一個與text相同的行結束。除非使用引號把輸入括起來,此模式將對輸入內容進行shell變量替換。如果使用<<- ,則會忽略接下來輸入行首的tab,結束行業可以是一堆tab再加上一個與text相同的內容
cmd <<< word
把word(而不是文件word)和后面的換行行為輸入提供給cmd
cmd <> file
以讀寫模式把文件file重定向到輸入,文件file不會被破壞。僅當應用程序利用了這一特性時,它才是有意義的
:>filename
把文件"filename"截斷為0長度,如果文件不存在,就創建一個0長度文件(與'touch'的效果相同)
cmd >& n 把輸出送到文件描述符n
cmd m>&n 把輸出到文件描述符m的信息重定向到文件描述符n
cmd >&- 關閉標注輸出
cmd <&n 輸入來自文件描述符n
cmd m<&n m來自文件描述符n
cmd <&- 關閉標準輸入
cmd <&n- 移動輸入文件描述符n而非復制它
cmd >&n- 移動輸出文件描述符n而非復制它
部分摘自http://web.itivy.com/article-821-1.html
原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/35067