shell中常用的特殊符號羅列如下:
# ; ;; . , / \ 'string'| ! $ ${} $? $$ $* "string"* ** ? : ^ $# $@ `command`{} [] [[]]
() (()) || && {xx,yy,zz,...}~ ~+ ~- & \<...\> + - %= == !=
# 井號 (comments)
注釋字符 該句不會被執行
~ 帳戶的 home 目錄
用戶的home目錄如:cd ~
; 分號
連續指令符號 如:cd ~/backup ; mkdir startup ; cp ~/.* startup/.
;; 連續分號 (Terminator)
case語句中擔任終結符
如:
case "$fop" in
help) echo "Usage: Command -help -version
filename" ;;
version) echo "version 0.1" ;;
esac
. 逗號
1 .代表當前目錄 ..代表上層目錄
2 正則表達式中 .代表匹配一個字元
'string' 單引號
括住部分將被視為單一字串 特殊字符失效
"string" 雙引號
括住部分將被視為單一字串 它防止通配符擴展但允許變量擴展
如 heyyou=homeecho "$heyyou"
`command` 倒引號
括住部分為命令 命令執行
, 逗點
分割功能 如 t=$((a=5+3,b=7-1,c=15/3))或者echo "a=$a,b=$b,c=$c"
/ 斜線
1 根目錄或目錄分隔號
2 除號
\ 倒斜線
1 特殊符號的作用消失
2 放在指令的最末端 表示指令連接下一行
| 管道
連結上個指令的標准輸出,做為下個指令的標准輸入。
! 驚歎號
1 條件判斷 邏輯否 如:!=
2 規則表達式 邏輯否 如:ls a[!0-9]
: 冒號
1 內建指令:"什麼事都不干",但返回狀態值 0
: 返回狀態碼0
: > f.$$等同於
cat /dev/null > f.$$
: ${HOSTNAME?} ${USER?} ${MAIL?} 檢查這些環境變數是否已設置,沒有設置的將會以標准錯
誤顯示錯誤訊息
2 環境變量分割符
PATH=$PATH:$HOME/fbin:$HOME/fperl:/usr/local/mozilla
? 問號
匹配一個任意的字元 如:# ls a?a1
* 星號
1 在文件名擴展上用來代表任何字元
2 在運算時代表 "乘法" 如 expr 3 \* 4
3 ** 次方運算 如 let "sus=2**3"echo "
$ 錢號
1 變量代表符號
2 正則中表示行末另外 如 grep -E ".$" 或sed 's/\.$//g' 或awk '/\.$/'
${} 變量的正規表達式
bash中${}用法:
${parameter:-word} parameter定義非空時,才不替換為word不賦值,否則替換但不賦值
${parameter:=word} parameter定義非空時,才不替換不賦值;否則替換並賦值
${parameter:?word} parameter若非真正的值,腳本退出
${parameter:+word} parameter若非真正的值,不替換不賦值;否則替換不賦值
${parameter:offset} parameter從第offset位向右子串
${parameter:offset:length} parameter從第offset位向右length長度的子串
${#parameter} parameter變量長度
${parameter#word} 刪除parameter最左端匹配第一個word
${parameter##word} 刪除parameter中從左向右能匹配的最長word
${parameter%word} 刪除parameter最右端匹配第一個word
${parameter%%word} 刪除parameter中從右向左能匹配的最長word
${parameter/pattern/string} 以string替換parameter中最左端的pattern
${parmeter//pattern/string} 以string替換所有parameter中的pattern
$[digit]
1 $0指令本身為0,
2 $1其後依此類推 引用第幾位變量但兩位數以上,則必須使用{}括住 如${12}
3 $* 則是代表所有引用變量的符號 $*將所有的引用變量視為一個整體
$@
$@代表所有引用變量 但符號 $@ 則仍舊保留每個引用變量的區段觀念
$? 狀態值
狀態值會回傳給父進程,用來檢查子進程的執行狀態
$$ 當前進程ID
() 指令群組
用括號將一串連續指令括起來稱為指令群組 如:(cd ~ ; vcgh=`pwd` ; echo $vcgh),指令群組
有一個特性 會以產生subshell來執行這組指令
(())
算數運算c=$((a+b))等同於let c=a+b等同於c=`expr $a + $b`等同於c=`echo $a + $b|bc`
{} 大括號
1 定義函數
2 字串的組合 如{userA,userB}-{home,bin}結果為userA-home, userA-bin, userB-home, userB
-bin
[] 中括號
1 在流程控制中表示判斷式 如:if [ "$?" != 0 ]
2 在正則表達式中表示"范圍"或"集合" rm -r 200[1234]
[[]]
與[]符號,基本上作用相同但允許在其中直接使用 || 與 && 邏輯等符號 如:[[ $ak > 5 && $ak
< 9 ]] && echo "ok"
|| 邏輯符號
代表 or 邏輯的符號。
&& 邏輯符號
代表 and 邏輯的符號。
& 後台工作
表示將該指令列放入後台中工作 如: tar cvfz data.tar.gz data > /dev/null &
\<...\> 單字邊界
規則表達式 如: grep -E '\<man\>' file
+ 加號 (plus)
1 表示 "加法" 如:expr 1 + 2 + 3
2 規則表達式中用來表示"很多個"的前面字元 如: grep '10\+9' fileB109109 前面必須加上
escape 字元。
- 減號 (dash)
1 表示 "減法" 如:expr 10 - 2
2 系統指令 tar xpvf - -符號從標准輸入讀取資料。
3 cd - 回到"上一次"工作目錄。
% 除法 (Modulo)
1 表示 "除法" 如:expr 10 % 2
2 規則表達式中${parameter%word} %表示最短的 word 匹配 ${parameter%%word} %%表示最長的
word匹配
= 等號
變量賦值
== 等號
代表 "等於"
!= 不等於
代表 "不等於"
^
代表行的 "開頭"