我正在尝试学习编写一些简单的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将在每次迭代后更改。正是我想要的。
答案 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启动该命令并检索输出。