一、Shell簡介linux
Shell是一個命令解釋器,它在操做系統的作外層,負責直接與用戶對話,把用戶的輸入解釋給操做系統,並處理各類各樣的操做系統的輸出結果,輸出到屏幕返回給用戶。這種對話方式能夠是交互的方式(從鍵盤輸入命令,能夠當即的到shell的迴應),或非交互(腳本)的方式。shell
shell 英文是貝殼的意思,命令解釋器 shell 就像一個貝殼同樣包住了系統核心。bash
二、什麼是 Shell 腳本運維
當 linux 命令或語句不在命令行下執行(嚴格說,命令行也是 shell),而是經過一個程序文件執行時,該程序就被稱爲shell腳本或shell程序,shell程序很相似dos系統下的批處理程序(擴展名*.bat)。編輯器
三、Shell 腳本語言的種類:函數
在unix/linux中主要有兩大類shell:spa
(1)Bourne shell (包括sh、ksh、bash)操作系統
(2)C shell(包括csh、tcsh)命令行
Shell 腳本是弱類型語言,較爲通用的shell有標準的Bourne shell(sh)和C shell(csh)。其中 Bourne shell(sh)已經被 bash shell取代。unix
Shell 的優點在於處理操做系統底層的業務,由於有大量的系統命令作支撐,shell開發更簡單快速,服務運維的原則。
四、Linux操做系統默認Shell是Bash
查看當前系統的shell :echo $SHELL
五、shell 腳本的創建
開頭:#!/bin/bash
其中開頭的「#!」又稱爲幻數,在執行bash腳本的時候,內核會根據「#!」後的解釋器來肯定用哪一個程序解釋腳本中的內容,若是不設置,就用系統默認的shell來解釋。
sh 爲 bash 的軟連接,標準寫法是#!/bin/bash
六、shell腳本的執行
當shell腳本以非交互的方式(文件方式)運行時,它會先查找環境變量ENV,該變量指定了一個環境文件(一般是.bashrc,.bash_profile,/etc/bashrc,/etc/profile等),而後從該環境變量文件開始執行,當讀取了ENV文件後,shell纔開始執行shell腳本中的內容。
七、shell腳本的基本規範。
#!/bin/sh 或 #!/bin/bash
開頭加版本版權等信息。
中括號兩端要有空格
八、Shell 變量
(1)變量類型
變量可分爲兩類:環境變量(全局變量)和局部變量。
環境變量也稱爲全局變量,能夠在建立他們的shell及其派生出來的任意子進程shell中使用。局部變量只能在建立他們的shell函數或腳本中使用。還有一些變量是用戶建立的,其餘的則是專用的shell變量。
(2)環境變量
環境變量用於定於Shell的運行環境,保證Shell命令的正確執行,Shell經過環境變量來肯定登陸的用戶名、命令途徑、終端目錄等,全部的環境變量都是全局的,可用於子進程中,包括編輯器,Shell腳本和各種應用(crond任務時最好自定義)。
環境變量能夠在命令行中設置,但用戶退出時這些變量值會丟失。
定義環境變量的路徑:
~/.bash_profile
/etc/bashrc
/etc/profile ----全局的環境變量
/etc/profile.d
全部環境變量均大寫。環境變量應用於用戶進程前,都應該用export命令導出,例如:export CHAN=1
八、查看系統的環境變量:
env
set
九、自定義環境變量
①export 變量名=value
②變量名=value;export 變量名
③declare -x 變量名=value
只在命令行生效。重啓或退出終端失效
區別:上面兩個只在用戶下生效,切換到別的用戶下不生效
十、取消本地變量和環境變量 -- unset
取消環境變量的時候變量不帶 $,只有在輸出的時候才帶$
shell中變量的命名,通常是數字、字母、下劃線組成,字母開頭
數字開頭定義變量不嚴謹。要用字母開頭
十一、單引號、雙引號的區別
單引號裏的內容原樣輸出。所見即所得
雙引號裏的變量解析,全部內容輸出。
雙引號裏的命令能夠用 `命令` 表示 也能夠是 $(命令) 表示
無引號,定義的變量之間不能有空格。
echo的特殊性,後面內容不加引號也能輸出,最好加雙引號。
小結:腳本中普通字符串儘可能雙引號,單純數字能夠不加引號。
(1)awk 的單雙引號存在特殊性:
awk 的單引號是解析變量,雙引號原樣輸出,不加引號無內容。
十二、Shell 特殊變量:
(1)位置變量:
$0 獲取當前執行的shell腳本的文件名,若是執行腳本帶路徑那麼就包括腳本路徑。
$n 獲取當前執行的shell腳本的第n個參數值,n=1..9,當n爲0時表示腳本的文件名,若是n大於9,用大括號括起來{10}
$* 獲取當前shell的全部參數,將全部的命令行參數視爲單個字符串,至關於"$1$2$3",注意與$#的區別。
$# 獲取當前shell腳本命令行中參數的總個數。
$@ 這個程序的全部參數"$1" "$2" "$3"...,這是將參數傳遞給其餘程序的最佳方式。
1三、查看文件的路徑或名字
dirname 文件路徑 顯示當前目錄的路徑
basename 文件名字 顯示當前文件的名字
1四、$# 簡單應用
傳入的參數必須是兩個。
1五、進程狀態變量。
$$ 獲取當前shell的進程號(PID)
$! 執行上一個指令的PID
$? 獲取執行上一個指令的返回值(0爲成功,非0爲失敗)
$_ 在此以前執行的命令或腳本的最後一個參數。
1六、$? 返回值參考
0 運行成功
2 權限拒絕
126 找到命令沒法執行
127 找不到命令
>128 命令被強制結束