指令碼中利用數組實現對機器的批量控制

來源:互聯網
上載者:User

指令碼中利用數組實現對機器的批量控制


   工作中對線上多台伺服器使用指令碼控制,如執行一些命令等。如果在指令碼中對每台伺服器都使用一條命令因為伺服器的ip,使用者名稱,密碼等可能不同),那麼指令碼會變得非常臃腫,且添加或刪除伺服器不方便。

   例如遠端連線一台伺服器,將原生檔案備到伺服器上,通常使用命令:

sshpass -p PASSWORD scp -p PORT -r /date/mysql/* USER@IP:/backup/

   如果需要備份到100台伺服器上,需要寫100個這樣的語句。

 

   這裡總結了幾種利用數組實現主機群組的定義,在命令中引用數組來實現簡潔操作。


方法1:

#!/bin/basharray=(passwd1 port1 user1 ip1passwd2 port2 user2 ip2passwd3 port3 user3 ip3passwd4 port4 user4 ip4passwd5 port5 user5 ip5passwd6 port6 user6 ip6)  for ((i=0;i<${#array[*]};i=i+4));do  echo passwoed is ${array[i]},port is ${array[i+1]},user is ${array[i+2]},ip is ${array[i+3]}  #sshpass -p ${array[i]} ssh -p${array[i+1]} ${array[i+2]}@${array[i+3]} "命令"  done

數組array中的每一行定義一個主機,明了且方便,可以添加多台伺服器,這個方法最好。

返回的結果如下:

passwoed is passwd1,port is port1,user is user1,ip is ip1passwoed is passwd2,port is port2,user is user2,ip is ip2passwoed is passwd3,port is port3,user is user3,ip is ip3passwoed is passwd4,port is port4,user is user4,ip is ip4passwoed is passwd5,port is port5,user is user5,ip is ip5passwoed is passwd6,port is port6,user is user6,ip is ip6


方法2:

#!/bin/bashpasswd=([0]=passwd1 [1]=passwd2 [2]=passwd3 [3]=passwd4)port=([0]=port1 [1]=port2 [2]=port3 [3]=port4)user=([0]=user1 [1]=user2 [2]=user3 [3]=user4)ip=([0]=ip1 [1]=ip2 [2]=ip3 [3]=ip4)for i in $(seq 0 3);do        echo password is ${passwd[i]},port is ${port[i]},user is ${user[i]},IP IS ${ip[i]}        #sshpass -p ${passwd[i]} ssh -p${port[i]} ${user[i]}@${ip[i]} "命令"done

這裡定義了4個數組,分別管理密碼,連接埠,使用者和ip,可以達到目的,但不是很明了,添加或去掉伺服器時要仔細。

返回結果如下:

password is passwd1,port is port1,user is user1,IP IS ip1password is passwd2,port is port2,user is user2,IP IS ip2password is passwd3,port is port3,user is user3,IP IS ip3password is passwd4,port is port4,user is user4,IP IS ip4


方法3:

#!/bin/basharray1=(passwd1 port1 user1 ip1)array2=(passwd2 port2 user2 ip2)array3=(passwd3 port3 user3 ip3)for i in `seq 1 3`;doecho password is ${array$i[0]},port is ${array$i[1]},user is ${array$i[2]},ip is ${array$i[3]}#sshpass -p ${array$i[0]} ssh -p${array$i[1]} ${array$i[2]}@${array$i[3]} "命令"done

這裡每個數組定義一個伺服器,直觀,明了。但在引用數組中的元素時出錯,

報錯資訊如下:

line 6: ${array$i[0]},port: bad substitution

${array$i[0]}中不能引用$i,所以這種方法是錯誤的,不知道為什麼數組中的元素名不能用變數表示,希望有知道的朋友講解一下。

本文出自 “阿三哥” 部落格,請務必保留此出處http://asange.blog.51cto.com/7125040/1279482

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.