shell自動化指令碼發布

2021-09-16 13:27:19 字數 4116 閱讀 5417

關於指令碼發布**部分,將這個**流程拆分為兩個部分: 簡單指令碼(遠端主機上執行)和大型指令碼(線上機器執行)

簡單指令碼從四個方面來學習:

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 手工執行的命令一定要可執行

2 根據發布流程編寫指令碼的框架

3 將手工執行的命令填充到對應的框架函式內部

4 增加日誌功能,方便跟蹤指令碼歷史執行記錄

5 主函式中邏輯流程控制好

6 設計安全的方面: 增加鎖檔案,保證**發布的過程中不受干擾,輸入引數數量, 輸入引數匹配 指令碼幫助資訊

7 除錯指令碼

1 命令一定要保證能正常執行

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 執行該命令終端不會輸出任何東西 或者使用如下方法...