如何循环遍历ip地址数组以获取bash中每台计算机的主机名?

时间:2017-03-23 14:32:03

标签: bash backup rsync

我正在尝试学习编写一些简单的bash脚本,我想创建一个备份脚本,它将使用rsync获取预定目录并将它们同步到备份机器。这是代码:

#!/bin/bash


#Specify the hosts
ip=(192.168.1.40 192.168.1.41 192.168.1.42 192.168.1.43)
#currently unused
webdirs=(/etc/nginx/sites-available/ /var/www/ghost)
#Directory to store everything
NAS=/mnt/synology/Torrents/Games/


#Remote-hosts to rsync from
for i in "${ip[@]}"
do
HOSTNAME=$(hostname)
NAS2=$HOSTNAME$NAS
  if [ ! -d "$NAS2" ]; then
    echo $NAS2 "does not exist, creating..."
    mkdir -p $NAS2
  else
    echo "inside the else"
    sudo rsync -anvzP -e "ssh -i $HOME/.ssh/id_rsa" victor@$i:/etc  $NAS2/
  fi
done;

没有完成,但我遇到了一个问题。我无法弄清楚如何为每台机器创建新目录。现在它只是为我的网络服务器创建目录。

编辑:我通过使用ssh和命令替换解决了它,我所做的就是这个:

HOSTNAME=$(ssh user@$i "hostname")

变量$ HOSTNAME将在每次迭代后更改。正是我想要的。

1 个答案:

答案 0 :(得分:0)

是您想要的输出类似于:

$host/mnt/synology/Torrents/Games/

其中$host是每个这些ips的名称:(192.168.1.40 192.168.1.41 192.168.1.42 192.168.1.43)?

在构建mkdir的路径时,您正在执行$(hostname),但该命令的输出将是您的本地计算机名称;它不会在每个主机上运行。

如果你想要每个主机名,你应该通过每个IP中的ssh启动该命令并检索输出。