linux_shell 特殊符號的介紹
#:注釋,行首以#開頭為注釋
標準的引用和轉義字元(" '/) 可以用來轉義#
; 命令分隔符,可以用來在一行中來寫多個命令
eg:cd ~/backup ; mkdir startup ; cp ~/.* startup/.
;; 終止case選項
. .命令等價於source命令
. .作為檔名的一部分。如果作為檔名的字首的話,那麼這個檔案將成為隱藏檔案。將不為ls列出
. .作為正規表示式的一部分,用來匹配任何的單個字元
" 部分引用."string"阻止了一部分特殊字元。
' 全引用.'string'阻止了全部特殊字元
, 逗號鏈結了一些列的算訴操作系列的算術操作,雖然裡邊所有的內容都被執行了,但只有最後一項被返回。
/ 轉義字元,如/x等價於"x"
/ 檔名路徑分
" 部分引用."string"阻止了一部分特殊字元。
' 全引用.'strin割符,或用來做除法操作.
` , 逗號鏈結了一系列的算術操作,雖然裡邊所有的內容都被執行了,但只有最後一項被
返回.如:
1 let "t2 = ((a = 9, 15 / 3))" # set "a = 9" and "t2 = 15 / 3"
/ 轉義字元,如/x 等價於"x"或'x',具體見第 5 章.
/ 檔名路徑分隔符.或用來做除法操作.
` 後置引用,命令替換,具體見第 14 章
: 空命令,等價於"nop"(no op,乙個什麼也不幹的命令).也可以被認為與 shell 的內建命令
(true)作用相同.":"命令是乙個 bash 的內建命令,它的返回值為 0,就是 shell 返回的 true.
! 取反操作符,將反轉"退出狀態"結果,(見 example 6-2).也會反轉 test 操作符的意義.比
如修改=為!=.!操作是 bash 的乙個關鍵字.
* 萬能匹配字元,用於檔名匹配(這個東西有個專有名詞叫 file globbing),或者是正則
表示式中.注意:在正規表示式匹配中的作用和在檔名匹配中的作用是不同的.
* 數學乘法.
**是冪運算.
eg:
let "sus=2**3"
echo "sus = $sus"
$ sus = 8 -
? 測試操作.在乙個確定的表示式中,用?來測試結果.
(())結構可以用來做數學計算或者是寫 c **,那?就是 c 語言的 3 元操作符的
乙個.在"引數替換"中,?測試乙個變數是否被 set 了.
? 在 file globbing 中和在正規表示式中一樣匹配任意的單個字元.
$ 變數替換
$ 在正規表示式中作為行結束符.
${} 引數替換
$*,$@ 位置引數
$@ 列出所有的引數,各引數用空格隔開
$*: 列出所有的引數,各引數用環境變數ifs的第乙個字元隔開
$? 退出狀態變數.$?儲存乙個命令/乙個函式或者指令碼本身的退出狀態.
$$ 程序 id 變數.這個$$變數儲存執行指令碼程序 id
() 命令組.如:
1 (a=hello;echo $a)
注意:在()中的命令列表,將作為乙個子 shell 來執行.
在()中的變數,由於是在子 shell 中,所以對於指令碼剩下的部分是不可用的.
如:1 a=123
2 ( a=321; )
34 echo "a = $a" # a = 123
5 # 在圓括號中 a 變數,更像是乙個區域性變數.
用在陣列初始化, 如:
1 array=(element1,element2,element3)
大括號擴充套件, 如:
1 cat > combined_file
2 # 把 file1,file2,file3 連線在一起,並且重定向到 combined_file 中.34
5 cp file22.
6 # 拷貝"file22.txt" 到"file22.backup" 中
乙個命令可能會對大括號中的以逗號分割的檔案列表起作用[1]. file globbing 將對
大括號中的檔名作擴充套件.
注意: 在大括號中,不允許有空白,除非這個空白是有意義的.
echo / :
file1 : a file1 : b file1 : c file2 : a file2 : b file2 : c
{} **塊.又被稱為內部組.事實上,這個結構建立了乙個匿名的函式.但是與函式不同的
是,在其中宣告的變數,對於指令碼其他部分的**來說還是可見的. 如:
bash$
bash 中的 local 申請的變數只能夠用在函式中.
1 a=123
2 3 echo "a = $a" # a = 321 (說明在**塊中對變數 a 所作的修改,影響了外邊的變
量 a)
45 # thanks, s.c.
注意: 與()中的命令不同的是,{}中的**塊將不能正常地開啟乙個新 shell.[2]
{} /; 路徑名.一般都在 find 命令中使用.這不是乙個 shell 內建命令.
注意: ";"用來結束 find 命令序列的-exec 選項.
test.
test 的表示式將在 中.
值得注意的是[是 shell 內建 test 命令的一部分,並不是/usr/bin/test 中的擴充套件命令
的乙個連線.
test.
test 表示式放在中.(shell 關鍵字)
具體檢視結構的討論.
陣列元素
array[1]=slot_1
echo $
字元範圍
在正規表示式中使用,作為字元匹配的乙個範圍
(()) 數學計算的擴充套件
在(())結構中可以使用一些數字計算.
具體參閱((...))結構.
>&>>&>><
重定向.
scriptname >filename 重定向指令碼的輸出到檔案中.覆蓋檔案原有內容.
command &>filename 重定向 stdout 和 stderr 到檔案中
command >&2 重定向 command 的 stdout 到 stderr
scriptname >>filename 重定向指令碼的輸出到檔案中.新增到檔案尾端,如果沒有檔案,
則建立這個檔案.
程序替換,具體見"程序替換部分",跟命令替換極其類似.
(command)>
<(command)
《和》 可用來做字串比較
《和》 可用在數學計算比較
<< 重定向,用在"here document"
<<< 重定向,用在"here string"
<,> ascii 比較
/<,/> 正規表示式中的單詞邊界. 如:
bash$grep '/' textfile
| 管道.分析前邊命令的輸出,並將輸出作為後邊命令的輸入.這是一種產生命令鏈的
好方法.
1 echo ls -l | sh
2 # 傳遞"echo ls -l"的輸出到 shell 中,
3 #+ 與乙個簡單的"ls -l"結果相同.45
6 cat *.lst | sort | uniq
7 # 合併和排序所有的".lst"檔案,然後刪除所有重複的行.
管道是程序間通訊的乙個典型辦法,將乙個程序的 stdout 放到另乙個程序的 stdin 中.
標準的方法是將乙個一般命令的輸出,比如 cat 或 echo,傳遞到乙個過濾命令中(在這個
過濾命令中將處理輸入),得到結果, 如:
cat $filename1 | $filename2 | grep $search_word
當然輸出的命令也可以傳遞到指令碼中.如:
>| 強制重定向(即使設定了 noclobber 選項--就是-c 選項).這將強制的覆蓋乙個現存盤案.
|| 或-邏輯操作.
& 後台執行命令.乙個命令後邊跟乙個&,將表示在後台執行.
- 用於重定向 stdin 或 stdout.
注意:以"-"開頭的檔名在使用"-"作為重定向操作符的時候,可能會產生問題.
應該寫乙個指令碼來檢查這個問題,並給這個檔案加上合適的字首. 如:
./-filename, $pwd/-filename,或$pathname /-filename.
如果變數的值以"-"開頭,可能也會引起問題.
1 var="-n"
2 echo $var
3 #具有"echo -n"的效果了,這樣什麼都不會輸出的.
- 之前工作的目錄."cd -"將回到之前的工作目錄,具體請參考"$oldpwd"環境變數.
注意:一定要和之前討論的重定向功能分開,但是只能依賴上下文區分.
- 算術減號.
= 算術等號,有時也用來比較字串.
1 a=28
2 echo $a # 28
+ 算術加號,也用在正規表示式中.
+ 選項,對於特定的命令來說使用"+"來開啟特定的選項,用"-"來關閉特定的選項.
% 算術取模運算.也用在正規表示式中.
~ home 目錄.相當於$home 變數.
~+ 當前工作目錄,相當於$pwd 變數.
~- 之前的工作目錄,相當於$oldpwd 內部變數.
=~ 用於正規表示式,這個操作將在正規表示式匹配部分講解,只有 version3 才支援.
^ 行首,正規表示式中表示行首."^"定位到行首.
轉
C 符號和 符號的用法介紹
1.忽略轉義字元 string str c windows system32 string str c windows system32 2.字串跨行 string str line one line two line three line fore string str line one line...
Linux 符號命令及符號問題
1 回車 r 本義是游標重新回到本行開頭,r的英文return,控制字元可以寫成 cr,即 carriage return 換行 n 本義是游標往下一行 不一定到下一行行首 n 的英文 newline,控制字元可以寫成 lf,即 line feed。2 windows下,記事本不支援 n 換行,它只...
Linux基本符號
linux環境下一些常用的符號 多個命令的分隔符 根目錄或路徑分隔符 重定向,資料沿箭頭方向流動,原來檔案內容會被丟棄 追加重定向,在原來檔案結尾追加內容 上一級目錄 當前目錄 使用者家目錄 管道 通過管道把前乙個命令的輸出交給後乙個命令繼續處理。配合echo列印序列echo path 環境變數,所...