- 1.Shell指令碼概述
- 2.Shell程式設計規範
- (1)編寫指令碼程式碼
- (2)指令碼編寫結構
- (3)Shell指令碼的執行
- 3.重定向與管道
- (1)互動式硬體裝置
- (2)重定向操作
- (3)管道操作“|”
- 4.Shell指令碼變數
- (1)自定義變數
- (1)定義一個新的變數
- (2)賦值時使用引號
- (3)設定變數的作用範圍
- (4)整數變數的運算
- (2)特殊變數
- (1)環境變數
- (2)只讀變數
- (3)位置變數
- (4)預定義變數
- (1)自定義變數
完成自動化運維工作,批次完成重複操作,結合crontab完成周期性任務
1.Shell指令碼概述
Shel指令碼的概念:將要執行的命令按順序儲存到一個文字檔案;給該檔案可執行許可權;可結合各種Shell控制語句以完成更復雜的操作。
Shell指令碼應用場景:重複性操作;互動性任務;批次事務處理;服務執行狀態監控;定時任務執行...
(1)Shell的作用——命令直譯器,“翻譯官”
介於系統核心與使用者之間,負責解釋命令列
(2)使用者登入Shell
登入後預設使用的Shel程式,一般為 /bin/bash
不同Shell的內部指令、執行環境等會有所區別
sh:UNIX最初使用的 shell,已經被bash所替換。
bash:基準於GNU的框架下發展出的Shell,是 sh 的擴充套件。
csh:語法有點類似於c語言的Shell。
tcsh:整合了csh,提供更多的功能。
nologin:奇怪的shell,這個shell可以讓使用者無法登入主機。
2.Shell程式設計規範
(1)編寫指令碼程式碼
使用vim文字編輯器
每行一條Linux命令,按執行順序依次編寫 vim XXX.sh
賦予可執行許可權,使指令碼具有可執行屬性chmod +x XXX.sh
程式語言型別:
編譯型:C C++ JAVA GO
程式碼檔案需要先編譯後,程式才能執行
解釋型:SHELL PYTHON
程式碼是邊解釋邊執行
(2)指令碼編寫結構
(1)申明直譯器
#!/bin/bash
#!/bin/python
(2)編寫註釋資訊:要以 # 號開頭表示為註釋,被註釋的語句在指令碼執行時是不會被執行的。
(3)編寫執行語句:按照順序編寫要執行的命令語句。
(3)Shell指令碼的執行
(1)bash 或 sh 指定指令碼檔案執行,可無執行許可權
絕對路徑或相對路徑指定指令碼檔案執行,要求有執行許可權
以上兩種方式都是在子Shell環境中執行指令碼
(2)source 或 . 指定指令碼檔案執行,可無執行許可權
會在當前shell環境中執行指令碼
3.重定向與管道
(1)互動式硬體裝置
標準輸入:從裝置接收使用者輸入的資料
標準輸出:透過該裝置向使用者輸出是資料
標準錯誤:透過該裝置報告執行出錯資訊
(2)重定向操作
命令 > 檔案 2>&1 效果等效於混合輸出
ls -lh > test.txt 2>&1
ls -lh 標準輸出 到螢幕 1 →螢幕
ls -lh > test.txt 重定向輸出 到 test.txt 1 → test.txt
2>&1 錯誤輸出 重定向到 標準輸出 2 → 1
(3)管道操作“|”
將左側的命令輸出結果,作為右側命令的處理物件
4.Shell指令碼變數
變數的作用:用來存放系統和使用者需要使用的特定引數(值)
變數名:使用固定的名稱,由系統預設或使用者定義
變數值:能夠根據使用者設定、系統環境的變化而變化
變相的型別:
自定義變數:由使用者自己定義、修改和使用
特殊變數:環境變數,只讀變數,位置變數,預定義變數
(1)自定義變數
(1)定義一個新的變數
變數名以字母或下劃線開頭,區分大小寫,建議大寫
變數名=變數值
檢視變數的值
echo $變數名
(2)賦值時使用引號
雙引號 "$XXX" 會把$看作為引用XXX變數值的特殊符號
單引號 '$XXX' 會把$看作為一個普通字元,不會引用變數的值
反撇號 `...` 命令替換,提取裡面的命令執行後的結果,效果等於$(...)
read -p "提示資訊" 變數名 #從鍵盤輸入中獲取變數值
(3)設定變數的作用範圍
預設情況下自定義的變數只能在當前shell環境中有效
讓自定義的變數在所有shell環境中有效的方法:
(1)在 /etc/profile
檔案中定義 export 變數名=變數值
匯出為全域性變數
source /etc/profile
立即生效 或 重新登入系統自動生效
(2)在 /etc/bashrc
檔案中定義 變數名=變數值
切換 shell 環境自動生效
(4)整數變數的運算
expr 變數1 運算子 變數2
運算子 | |
---|---|
+ | 加法運算 |
- | 減法運算 |
* | 乘法運算 |
/ | 除法運算 |
% | 求模(取餘)運算 |
整數運算
echo $(expr 整數1 運算子 整數2) $(expr $變數1 運算子 $變數2) + - \* / %
echo $[整數1 運算子 整數2] $[變數1 運算子 變數2] + - * / %
echo $((整數1 運算子 整數2)) $((變數1 運算子 變數2)) + - * / %
let a=10+5
let a++ 相當於 a=$[a+1]
let a-- 相當於 a=$[a-1]
let a+=2 相當於 a=$[a+2]
浮點數運算
echo '4.5+2.1' | bc
awk 'BEGIN{print 4.5+2.1}'
(2)特殊變數
(1)環境變數
由系統提前建立,用來設定使用者的工作環境
配置檔案:/etc/profile、~/.bash_profile
常見的環境變數:
PWD、PATH
USER 、SHELL、HOME
env #檢視當前shell
(2)只讀變數
用於變數值不允許被修改的情況
readonly
只讀變數不可以被重新賦值
只讀變數不可以被刪除
(3)位置變數
(4)預定義變數
當天日期 date +"%Y%m%d"
明天日期 date -d "1 day" +"%Y%m%d"
昨天日期 date -d "-1 day" +"%Y%m%d"
當月第一天 date +"%Y%m01"
下個月第一天 date -d "1 month" +"%Y%m01"
當月最後一天 date -d "$(date -d "1 month" +"%Y%m01") -1 day" +"%Y%m%d"