首页 > 解决方案 > Bash:在shell脚本中将变量传递给其他服务器

问题描述

我有控制器节点(CN)和服务器节点(SN)。从 CN,我需要配置每个 SN 的主机名。inv文件包含 SN 列表和相应的主机名。

在下面的脚本中,我不确定如何传递hostname变量。有什么最好的方法来达到同样的效果吗?

#!/bin/bash

IFS='\n'

for data in `awk 'NR>1 {print}' inv`
do
        ip=`awk '{print $1}' <<< $data`
        hostname=`awk '{print $2}' <<< $data`
        ssh root@$ip "hostnamectl set-hostname $hostname"
done

inv 文件,

IPs                     Hostname
172.31.98.11            Server1
172.31.106.177          Server2
172.31.97.105           Server3

标签: bashshell

解决方案


无需在awk此处使用,因为您只是在第一条记录之后打印所有行。Atail做这项工作。

您可以使用这个 bash 脚本:

while read -r ip hn; do
   ssh root@"$ip" "hostnamectl set-hostname $hn"
done < <(tail -n +2 inv)

推荐阅读