麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 課堂 > 基礎知識 > 正文

shell的參數和腳本流程改進

2024-09-12 20:30:07
字體:
來源:轉載
供稿:網友
  今天痛下決心,把事務的工作一定要使用平臺來做,時間短,任務緊,之前的運維開發是鋪了一個面,每個面都做一些相關的事情,所以工作整體看都有進展,但是最后沒有一個專注的功能。
 
  所以我就在想到底是怎么回事,我能不能專注一些,哪怕就實現一個簡單的功能,把它做好做透,其他的功能是不是能夠同樣復制很多的思想。于是乎,上班后我開始整理自己的思路,一邊問自己,一邊回答,每個回答都對應兩列,一個是需要做的改進(action),還有一個是這個action的預估時間。結果幾分鐘下來,我發現如果理想的情況下,我只需要2個小時就能搞定,這么一想,還是能接受的,于是對需要做的事情排了一個順序,立馬開干。
 
  我的設計是使用運維平臺連接中控服務器來級聯觸發遠程操作,這樣運維平臺對所有環境的耦合性是最低的。
 
  哪怕是最簡陋的操作,也要咬著牙完成,于是大體是這樣的流程,上午的時候有兩個部署需求,下午有兩個,第一個是在半調試狀態下完成的,第二個開始做腳本的模塊化整理,是一個半自動的過程,然后發現了一些問題,非常糾結的去修復歷史部署問題,等到第三個需求的時候,明顯好了許多,到了第四個,就可以一口氣完成了,流程打通了,細節就可以打磨了。
 
  于是我對有的腳本的邏輯進行改造,有一個很通用的需求,假設腳本是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
 
  可見是達到了預期的目標了,所以這個思路可以借鑒,在其他的地方也可以參考使用。

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久久久久久浪潮精品 | 免费毛片视频 | 国产成年人在线观看 | 91在线免费观看 | 国产日韩在线视频 | 在线91观看 | 伊人网站| 日韩精品一区二区三区中文 | 草草久久久 | 日本黄色不卡视频 | 成人在线观看免费观看 | 视频一区二区三区中文字幕 | 青青国产在线视频 | 日本在线不卡一区二区 | 国产成人在线网址 | 日韩激情一区 | 精品中文字幕久久久久四十五十骆 | 国产精品自拍99 | 日韩中字在线 | 久久精品视频一区二区 | 国产成人高清在线观看 | 在线成人av观看 | 国产一级毛片高清 | av在线网站观看 | 中文字幕综合在线观看 | 国产无遮挡一级毛片 | 一级美女大片 | 欧美a∨一区二区三区久久黄 | 久久777国产线看观看精品 | 亚洲综合一区在线观看 | 操毛片 | 亚洲成人在线免费 | 国产精品久久久久久久久久久久久久久久 | 欧美另类综合 | 色视频在线 | 欧美一级片免费在线观看 | 高清成人在线 | 亚洲精品欧美二区三区中文字幕 | 久久探花| 香蕉成人在线观看 | 国产免费高清在线 |