Linux 萬用字元與特殊符號的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# 註解符號:這個最常被使用在 script 當中,視為說明!在後的資料均不執行 \ 跳脫符號:將『特殊字元或萬用字元』還原成一般字元 | 管線 (pipe):分隔兩個管線命令的界定 ; 連續指令下達分隔符號:連續性命令的界定 (注意!與管線命令並不相同) ~ 使用者的家目錄 $ 取用變數前置字元:亦即是變數之前需要加的變數取代值 & 工作控制 (job control):將指令變成背景下工作 ! 邏輯運算意義上的『非』 not 的意思! / 目錄符號:路徑分隔的符號 >, >> 資料流重導向:輸出導向,分別是『取代』與『累加』 <, << 資料流重導向:輸入導向 (這兩個留待下節介紹) ' ' 單引號,不具有變數置換的功能 ($ 變為純文字) " " 具有變數置換的功能! ($ 可保留相關功能) ` ` 兩個『 ` 』中間為可以先執行的指令,亦可使用 $( ) ( ) 在中間為子 shell 的起始與結束 { } 在中間為命令區塊的組合! !! 重複執行最後一條命令 !$ 顯示系統最近的一條參數 * 代表『 0 個到無窮多個』任意字元 ? 代表『一定有一個』任意字元 [ ] 同樣代表『一定有一個在括號內』的字元(非任意字元)。例如 [abcd] 代表『一定有一個字元, 可能是 a, b, c, d 這四個任何一個』 [ - ] 若有減號在中括號內時,代表『在編碼順序內的所有字元』。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數字的語系編碼是連續的! [^ ] 若中括號內的第一個字元為指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字元,只要是非 a, b, c 的其他字元就接受的意思。 |
特殊符號 ; && ||
cmd ; cmd (不考慮指令相關性的連續指令下達)
在某些時候,我們希望可以一次執行多個指令,例如在關機的時候我希望可以先執行兩次 sync 同步化寫入磁碟後才 shutdown 電腦,那麼可以怎麼作呢?這樣做呀:
1 |
sync; sync; shutdown -h now |
那麼我們怎麼透過這個回傳值來判斷後續的指令是否要執行呢?這就得要藉由『 && 』及『 || 』
&& 分開兩個指令, 即第一道指令執行成功後, 才會執行第二道指令, 例如 make && make install
|| 表示第一道指令執行失敗後, 才會執行第二道指令, 例如 cat filename || echo “fail”
指令下達情況
1 2 3 4 5 |
cmd1 && cmd2 1. 若 cmd1 執行完畢且正確執行($?=0),則開始執行 cmd2。 2. 若 cmd1 執行完畢且為錯誤 ($?≠0),則 cmd2 不執行。 cmd1 || cmd2 1. 若 cmd1 執行完畢且正確執行($?=0),則 cmd2 不執行。 2. 若 cmd1 執行完畢且為錯誤 ($?≠0),則開始執行 cmd2。 |
| 管線命令 (pipe)
管線命令與『連續下達命令』是不一樣的
其實這個管線命令『 | 』僅能處理經由前面一個指令傳來的正確資訊
管線『 | 』用來隔開兩個命令,管線左邊命令的輸出會作為管線右邊命令的輸入
即是將第一道指令的輸出, 作為第二道指令的輸入, 例如 ls | grep filename
tee
tee 用來向多個目標發送輸出內容。它可以將輸出複製一份到一個文件,並複製另外一份到屏幕上(或一些其它程序)
1 |
~$ ll /etc | nl | tee /tmp/ll.out |
在以上例子中,從ll輸出可以到 /tmp/ll.out 文件中,並且同樣在屏幕上顯示了出來。