https://www.wulaoer.org/?p=2138 下面是我的配置文件.
- [service1]
- node1=root 192.168.1.1 123456 22
- node2=root 192.168.1.2 123456 22
- [service2]
- node1=root 192.168.1.4 123456 22
- node2=root 192.168.1.5 123456 22
读取配置文件
这里需要读取配置文件,并且把文件中的,用户列,ip列,密码列,端口列分别获取出来,然后通过截取获取service1和service2之间有多少行就循环多少次,然后在每次循环中去执行写好的shell脚本即可,看一下我的循环内容。
- function basicsnode() {
- cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | sed -n ''$num' p' | awk -F '=' '{print $2}'
- #这里读取的是service1和service2之间的
- #node1=root 192.168.1.1 123456 22
- #node2=root 192.168.1.2 123456 22
- #使用了参数$num获取的是行,用等号分割,获取的值就是root 192.168.1.1 123456 22
- }
-
- function basicsservice() {
- masternul=$(cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | wc -l) #获取service1和service2之间的行数
- if [ $servernum = "node" ] #判断等号前面的关键词
- then
- for ((i=1; i<=$masternul; i++))
- do
- num=$i #传入参数调用basicsnode函数
- users=$($basicsnode | awk -F ' ' '{print $1}') #通过空格分割第一列用户名
- userip=$($basicsnode | awk -F ' ' '{print $2}') #通过空格分割第二列用户ip
- userpass=$($basicsnode | awk -F ' ' '{print $3}') #通过空格分割第三列用户密码
- userport=$($basicsnode | awk -F ' ' '{print $4}') #通过空格分割第四列端口号
- done
- }
读取到文件内容,我们需要做的就是利用sshpass进行拼接成一个完整的命令即可,这样通过for循环就可以进行批量执行了。
批量执行
这里的批量执行用到了sshpass,避免每次登录需要提示输入yes,所以可以使用sshpass的StrictHostKeyChecking=no参数跳过输入yes,这样就登录到远程机器上了,下面要做的就是执行脚本,我们把需要执行的内容写成一个脚本,然后在每次登录的时候都执行一下脚本即可,这样就完成了批量执行。
- function basicsnode() {
- cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | sed -n ''$num' p' | awk -F '=' '{print $2}'
- #这里读取的是service1和service2之间的
- #node1=root 192.168.1.1 123456 22
- #node2=root 192.168.1.2 123456 22
- #使用了参数$num获取的是行,用等号分割,获取的值就是root 192.168.1.1 123456 22
- }
-
- function basicsservice() {
- masternul=$(cat /config/app.txt | sed -n '/service1/,/service2/{//!p}' | wc -l) #获取service1和service2之间的行数
- if [ $servernum = "node" ] #判断等号前面的关键词
- then
- for ((i=1; i<=$masternul; i++))
- do
- num=$i #传入参数调用basicsnode函数
- users=$($basicsnode | awk -F ' ' '{print $1}') #通过空格分割第一列用户名
- userip=$($basicsnode | awk -F ' ' '{print $2}') #通过空格分割第二列用户ip
- userpass=$($basicsnode | awk -F ' ' '{print $3}') #通过空格分割第三列用户密码
- userport=$($basicsnode | awk -F ' ' '{print $4}') #通过空格分割第四列端口号
- sshpass -p $userpass ssh -o -p $userport StrictHostKeyChecking=no $users@$userip < sshpass-install.sh
- #使用sshpass组合一个登录命令,后面的sshpass-install.sh就是选择的执行脚本,
- done
- }
当然也可以写多个判断根据交互安装不同分区的机器,然后把不同判断执行不通的脚本,这样就可以根据自己的需求执行不同分区。后期只需要更新我们后面的脚本即可,这样就可以根据自己的需要完成批量执行了,没有了,看些其他的吧。
分享到微信朋友圈
微信扫一下
将本文分享至朋友圈
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏