shell指令碼0——”一切皆檔案“, 認識Shell

daduryi發表於2017-04-11

一、”一切皆檔案“與“管道”

1)管道:grep foo /path/to/file | grep -n -k 3 | more

實際過程與我們直觀認為的相反,最好通過實際過程理解。首先執行的是more,它的輸入被連線至一個管道。然後是sort,並且其輸出被連線至之前的那個管道。接著建立第二個管道,並且將sort的stdin連線至該管道。最後執行grep,將其stdout連線至與sort程式相連的那個管道。

當grep開始執行並輸出資料時,資料順著管道流向sort,sort處理後順著管道輸出到more,由more對管道輸出的全部內容進行分頁輸出。在由錯誤的情況下,這樣的過程會有不同的行為,more有錯誤,不會有任何事情發生,若grep鍵入錯誤,則more和sort會執行到錯誤被檢測出來。

2)管道的存在使得系統中的工具在編寫時假設它們處理的是文字流。”一切皆檔案“的概念與4種可執行的檔案操作(opne close read write)意味著Unix實際上使用了一種簡潔明瞭的系統設計方法。shell指令碼本身也是文字形式的系統實用程式。

二、開始一個shell指令碼

1)使用者登入的shell程式就是一個設立了程式直譯器,解釋執行shell指令碼;

通常在shell程式的首行指明shell程式採用哪個直譯器來執行它,格式為:#!/bin/bash,若沒有指明,用當前登陸shell來解釋執行,echo $SHELL可以檢視登陸的shell程式

2)執行:chmod +x 然後./執行    或者bash *.sh

3)以#開頭的行為註釋行

 

三、認識shell

LINUX是一個作業系統,它在CPU、磁碟驅動器、記憶體、監視器、鍵盤和其他硬體之間起調節作用。(非圖形介面時)當你看那UNIX螢幕時,實際上並沒有見到UNIX,只是見到由該作業系統執行的一個程式,它對鍵盤進行監控並作出相應,這個程式就被稱作註冊Shell(Login Shell)。

 

bash  啟動新的shell命令

exit    退出

echo $SHLVL

 

注1:

開頭的空格被忽略,縮排只是為了好看

\ 字元讓shell忽略換行符, 用於換行接續命令

# 註釋,可用在行首、行尾

#!/bin/bash   指令碼開頭

 

Shell程式設計:

差不多總是用來使任務自動化。Shell與使用者互動的工具非常少,至多可以問使用者一個問題和接收一個文字答覆,需要使用者互動時應使用效能更全面的語言

 

Shell特性:

別名alias;

命令替換:倒引號(`)把一個命令的輸出合併到另一個命令中;

後臺處理:(不需要提供輸入) find / -name “hello” -print > find.log & ;

變數;

管道(pipe):把一個命令的輸出連線到另一個命令的輸入。

重定向(redirection):可以改變程式的輸入來源和程式的輸出地點 

模式匹配: ls *.py

 

特殊字元:

“ 使shell無法認出大多數特殊字元(除去$ `)

‘ 使shell無法認出所有特殊字元

`命令替換

\跟在反斜槓之後的字元就失去其特殊含義

;使一行上放多個命令

&後臺

()建立組命令

{}用來建立Shell過程的命令塊

|管道

<>&重定向

*?[]!用於檔名模式匹配

$引用變數名開頭

#註釋

空格 製表符 換行符   通稱空白符用於分隔Shell命令中的詞

 

相關文章