Linux 符號介紹

2021-09-30 15:42:13 字數 4779 閱讀 6814

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 環境變數,所...