Shell指令碼與Windows/Dos下的批處理相似,就是將各類命令預先放入到一個檔案中,然後執行該檔案,便可以達到與批處理類似的功能,主要是方便管理員進行設定或者管理用的。
換句話來說,shell指令碼是利用shell的功能所寫的一個程式,這個程式使用純文字檔案,將一些shell的文法與指令寫在裡面,然後用正規標記法,管線命令以及資料流重導向等功能,以達到我們所想要的處理目的。
這裡有必要說一下shell和shell指令碼的區別。
Shell就是一個命令列解譯器,它的作用就是遵循一定的文法將輸入的命令加以解釋並傳給系統。它為使用者提供了一個向Linux發送請求以便運行程式的介面系統級程式,使用者可以用Shell來啟動、掛起、停止甚至是編寫一些程式。Shell本身是一個用C語言編寫的程式,它是使用者使用Linux的橋樑。
Shell既是一種命令語言,又是一種程式設計語言(shell指令碼)。作為命令語言,它互動式地解釋和執行使用者輸入的命令;作為程式設計語言,它定義了各種變數和參數,並提供了許多在高階語言中才具有的控制結構,包括迴圈和分支。它雖然不是 Linux系統核心的一部分,但它調用了系統核心的大部分功能來執行程式、建立文檔並以並行的方式協調各個程式的運行。
1.文法基礎
1.1開頭
Shell指令碼程式必須以如下的語句行開始(必須方在檔案的第一行):
#!/bin/sh
“#!/bin/sh"是對shell的聲明,說明你所用的是那種類型的shell及其路徑所在。如果沒有該語句聲明,則指令碼將在預設的shell中執行。
1.2注釋
在進行shell編程時,以#開頭的句子表示注釋,直到這一行的結束。
備忘:“#!/bin/sh"不是注釋。
1.3變數
在shell編程中,所有的變數都由字串組成,並且不需要對變數進行聲明。對變數賦值,可以使用如下語句:
var="hello world"
備忘:“=”前後不能有空格,句尾不能有“;”。
2.常用指令
echo "some text": 將文字內容列印在螢幕上
ls: 檔案清單
wc –l filename:計算檔案行數
wc -w filename:計算檔案中的單詞數
wc -c filename: 計算檔案中的字元數
cp sourcefile destfile: 檔案拷貝
mv oldname newname : 重新命名檔案或移動檔案
rm filename: 刪除檔案
grep 'string' filename: 在檔案內搜尋字串
cat filename: 輸出檔案內容到螢幕上
file filename: 得到檔案類型
read var: 提示使用者輸入,並將輸入賦值給變數
find: 搜尋檔案
tee: 將資料輸出到標準輸出裝置(螢幕) 和檔案比如:somecommand | tee outfile
basename filename: 返回不包含路徑的檔案名稱
dirname filename: 返迴文件所在路徑
sed: 尋找替換