亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

shell的參數和腳本流程改進

發布時間:2020-08-04 19:05:47 來源:ITPUB博客 閱讀:158 作者:jeanron100 欄目:MySQL數據庫

今天痛下決心,把事務的工作一定要使用平臺來做,時間短,任務緊,之前的運維開發是鋪了一個面,每個面都做一些相關的事情,所以工作整體看都有進展,但是最后沒有一個專注的功能。

所以我就在想到底是怎么回事,我能不能專注一些,哪怕就實現一個簡單的功能,把它做好做透,其他的功能是不是能夠同樣復制很多的思想。于是乎,上班后我開始整理自己的思路,一邊問自己,一邊回答,每個回答都對應兩列,一個是需要做的改進(action),還有一個是這個action的預估時間。結果幾分鐘下來,我發現如果理想的情況下,我只需要2個小時就能搞定,這么一想,還是能接受的,于是對需要做的事情排了一個順序,立馬開干。

shell的參數和腳本流程改進

我的設計是使用運維平臺連接中控服務器來級聯觸發遠程操作,這樣運維平臺對所有環境的耦合性是最低的。

哪怕是最簡陋的操作,也要咬著牙完成,于是大體是這樣的流程,上午的時候有兩個部署需求,下午有兩個,第一個是在半調試狀態下完成的,第二個開始做腳本的模塊化整理,是一個半自動的過程,然后發現了一些問題,非常糾結的去修復歷史部署問題,等到第三個需求的時候,明顯好了許多,到了第四個,就可以一口氣完成了,流程打通了,細節就可以打磨了。

于是我對有的腳本的邏輯進行改造,有一個很通用的需求,假設腳本是initdb.sh要調用這個腳本需要輸入一系列的參數,比如有5個參數。

這個腳本里面有10個步驟,每個步驟都是使用function來實現的。如果要處理這5個參數,同時能夠控制10個步驟的執行,比如第2步不執行,第3步執行。腳本中其實還是比較難以管理和實現的。

我設想了幾種實現思路:

1)把10個步驟拆分成10個腳本,然后每個腳本都有自己的調用方式,獨立控制

2)寫一個配置腳本,比如main.sh然后在這個腳本里控制initdb.sh的執行情況

第二種看起來好一些,但是問題還是沒有解決,因為參數怎么管理,10個步驟怎么處理還是得細化。

我的初步設想是5個參數,外帶一個參數即可,前面五個參數和一個步驟的參數。

預期執行情況大體如下:

# sh a.sh x x x x x 'init1 init3 init2'

init1

init3

init2

即執行的時候是按照init1 init3 init2的方式執行的。

關鍵代碼如下:

function init1(){

echo 'init1'

}

function init2(){

echo 'init2'

}

function init3(){

echo 'init3'

}

function initdb(){

arr=$1

for fun in ${arr[*]}; do

echo $i

case $fun in

init1)

echo "test init1"

init1

;;

init2)

echo "test init2"

init2

;;

init3)

echo "test init3"

init3

;;

*)

echo "out of scope"

esac

done

}

init_par=$1

actions=($init_par)

initdb "${actions[*]}"

執行結果如下:

[root@dev01 test]# sh a.sh 'init1 init3 init2'

test init1

init1

test init3

init3

test init2

init2

這里有個問題,那就是我們輸入的操作步驟可能是無序的,但是執行的時候是希望按照順序,比如步驟2是依賴于步驟1的,這個我們是明確的。如果要實現這樣一個需求,就需要額外的一些補充,那就是排序功能,或者是前端傳入的時候來控制更好。

沒事,能者多勞,我們就先實現了。保證能正確的運行起來,于是代碼又開始一通改動。

function init1(){

echo 'init1'

}

function init2(){

echo 'init2'

}

function init3(){

echo 'init3'

}

function initdb(){

arr=$1

complete_arr=(init3 init1 init2)

order_arr=()

for act_tmp in ${complete_arr[*]}; do

if [[ " ${arr[@]} " =~ " $act_tmp " ]];then

echo $act_tmp

order_arr[${#order_arr[@]}]=$act_tmp

echo order_arr[${#order_arr[@]}]

fi

done

for fun in ${order_arr[*]}; do

echo $i

case $fun in

init1)

echo "test init1"

init1

;;

init2)

echo "test init2"

init2

;;

init3)

echo "test init3"

init3

;;

*)

echo "out of scope"

esac

done

}

init_par=$1

actions=($init_par)

initdb "${actions[*]}"

假設正確的步驟我們改為了init3 init1 init2,傳入參數為init1 init3 init2,如果能夠轉換,幸福感就大大提高了。

腳本的執行結果如下:

[root@dev01 test]# sh aa.sh 'init1 init3 init2'

init3

order_arr[1]

init1

order_arr[2]

init2

order_arr[3]

test init3

init3

test init1

init1

test init2

init2

可見是達到了預期的目標了,所以這個思路可以借鑒,在其他的地方也可以參考使用。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

右玉县| 晋州市| 普格县| 吉林省| 平舆县| 眉山市| 湘阴县| 含山县| 东宁县| 宽城| 江口县| 高清| 嘉禾县| 奉化市| 股票| 郯城县| 浦江县| 大关县| 新河县| 平远县| 永德县| 军事| 桐庐县| 平塘县| 新和县| 喀喇| 禹城市| 建始县| 建水县| 长沙县| 广宁县| 都昌县| 邵武市| 土默特右旗| 乐亭县| 延长县| 丹巴县| 嘉鱼县| 鄂托克前旗| 海淀区| 丰城市|