關於指令碼發布**部分,將這個**流程拆分為兩個部分: 簡單指令碼(遠端主機上執行)和大型指令碼(線上機器執行)
簡單指令碼從四個方面來學習:1 命令羅列實現功能
2 固定內容變數實現
3 功能函式實現
4 遠端執行命令
簡單的命令羅列:例項:cd /data/codes
[ -f django.tar.gz ] && rm -f django.tar.gz
tar zcf django.tar.gz django
指令碼編寫完成後,進行測試: sed -i 「s#1.1#1.2#」 /data/codes/djangp/views.py
bash /data/scripts/tar_code.sh
檢視壓縮內容 : zcat django.tar.gz
指令碼裡面的書寫的固定內容太多了,更改時候費勁,所以需要固定內容變數化file=「django.tar.gz」
code_dir=』/data/codes』
code_pro=『django』
cd '(co
dedi
r)′[
−f
"(code_dir)' [ -f "
(coded
ir)
′[−f
"" ] && rm -f 「fil
e"ta
rzcf
"" tar zcf "
file"t
arzc
f"」 「$」
指令碼編寫完成以後,進行測試
sed -i 『s#1.2#1.3#』 /data/codes/django/views.py
bash /data/scripts/tar_codes.sh
fike=『django.tar.gz』code-dir=』/data/codes』
code_pro=『django』
code_tar()' [ -f "
coded
ir′[
−f"" ] && rm -f 「fil
e"ta
rzcf
"" tar zcf "
file"t
arzc
f"」 「$」
}code_tar
指令碼編寫完成後,進行測試: sed -i 「s#1.2#1.3#」 /data/codes/django/views.py
bash /data/scripts/tar_code.sh
格式 ssh 遠端主機登入使用者名稱@遠端主機ip位址 「執行命令」示例:ssh [email protected] 「ifconfig eth0」
遠端更新內容: ssh [email protected] "sed -i /『s#1.4#1.5#』 /data/codes/django/views.py "遠端檢視指令碼: ssh [email protected] 「ls /data/scripts」
遠端執行指令碼 ssh [email protected] 「/bin/bash /data/scripts/tar_code.sh」
遠端檢查更新效果: ssh [email protected] 「zcat /data/codes/django.tar.gz」
編寫大型指令碼有乙個流程:一 指令碼框架
二 命令填充
三 完善功能 : 完善功能有: 增加日誌功能 增加鎖檔案功能 增加主函式邏輯 增加引數安全措施
為什麼要使用指令碼框架: 1 命令多 2 功能多 3 不好組合
方案是: 使用函式來體現
增加日誌功能 :1 日誌檔案 /data/logs/deploy.log
2 日誌格式 日期 時間 指令碼名稱 步驟
示例:log_file=』/data/logs/deplpy.log』
write_log() $ 0:0:
0:" >> 「$」
}
需求: 同一時間段內,只允許有乙個使用者來執行這個指令碼 如果指令碼執行的時候,有人在執行,那麼輸出報錯: 指令碼 deploy.sh 正在執行,請稍後""""""""""""設計:1 鎖檔案 /tmp/deploy.pid
2 存在鎖檔案的時候, 需要建立鎖檔案
3 指令碼執行的時候,需要建立鎖檔案
4 指令碼執行結束的時候, 需要刪除鎖檔案
知識點: 條件和結果:雙分支if語句
檔案表示式: -f file_name
驗證表示式:
建立和刪除命令: touch rm -f
示例:pid_file=』/tmp/deploy.pid
add_lock()' at position 32: …te_log "增加鎖檔案" }̲ #刪除鎖檔案功能 del_l…」
write_log 「刪除鎖檔案」
}部署函式
deploy_pro()
分析:1 指令碼傳參,就需要在指令碼內部進行呼叫引數
2 指令碼的幫助資訊
3 指令碼內容就需要對傳參的內容進行判斷
知識點:
1 shell內建變數
2 幫助資訊 : 簡單函式定義和呼叫
3 內容判斷: 多if語句或者case語句
方案:1 指令碼的傳參
指令碼執行: bash deploy.sh deploy
位置引數的呼叫: $1
2 指令碼的幫助資訊: 定義乙個usage函式,然後呼叫
3 內容判斷:
main函式體呼叫函式傳參 :$1
在main函式中,結合case語句,對傳入的引數進行匹配
如果傳入引數內容是"deploy" 那麼久執行**部署流程
如果傳入的引數內容不是"deploy",那麼輸出指令碼幫助資訊
if語句和case語句的結合 : if語句在外,case語句在內 case語句在外,if語句在內
需求:對指令碼傳入的引數的數量進行判斷,如果引數數量不對,提示指令碼的使用方式,然後退出分析:1 指令碼引數數量判斷
2 條件判斷: 數量對 ,那麼執行主函式 數量不對,那麼呼叫指令碼幫助資訊
知識點: 1 指令碼引數數量判斷 : shell 內建變數: $# 條件表示式: [ $# -eq 1]
2 條件判斷: 雙分支if語句
示例:if [ $# -eq 1]
then
main $1
else
usage
fi
指令碼除錯分三種方式來介紹;-n 檢查指令碼中的語法錯誤
-v 先顯示指令碼所有內容,然後執行指令碼,結果輸出,如果執行遇到錯誤,將錯誤輸出
1 手工執行的命令一定要可執行2 命令簡單羅列
3 固定的內容變數化
3 功能函式化
1 手工執行的命令一定要可執行1 命令一定要保證能正常執行2 根據發布流程編寫指令碼的框架
3 將手工執行的命令填充到對應的框架函式內部
4 增加日誌功能,方便跟蹤指令碼歷史執行記錄
5 主函式中邏輯流程控制好
6 設計安全的方面: 增加鎖檔案,保證**發布的過程中不受干擾,輸入引數數量, 輸入引數匹配 指令碼幫助資訊
7 除錯指令碼
2 成對的符號, 要成對寫,避免丟失
3 函式呼叫: 寫好函式後,一定要在主函式中呼叫
4 避免符號出現中文
5 命令變數的寫法一定要規範
6 固定的內容一定要變數實現, 方便以後更改
7 日誌的輸出
8 指令碼的傳參和函式的傳參要區別對待
自動化編譯shell指令碼 jenkins
為了實現我們的應用自動編譯 組織版本 設定md5值 上傳編譯包 打基線等操作。自動化編譯shell指令碼 export lc ctype zh cn.utf 8 輸入引數 發布版本號設定 編譯時根據實際情況改動 relversion x.y.z 輸入引數 庫的測試基線路徑設定 需改動 buildba...
shell指令碼 自動化部署lnmp
root localhost shell vim lnmp.sh bin bash yum y install httpd 安裝http yum y install mariadb mariadb devel mariadb server 安裝資料庫 yum y install php php my...
Shell指令碼之 Web自動化
例如 wget url 3 wget命令引數說明 o 指定乙個日誌檔案,不必將日誌資訊列印到stdout zhidao.baidu.com question 1818975931865141188.html o myweb.html o weblog 執行該命令終端不會輸出任何東西 或者使用如下方法...