如何从 shell 脚本进行 ssh 并使用全局参数执行 for 循环?

如何从 shell 脚本进行 ssh 并使用全局参数执行 for 循环?

我想要完成的事情是这样的。

Servers = (11, 12, 13)

ssh -t [email protected] << EOF
    sudo tar -zcf somefolders.tar.gz ~/somefolders
    for i in "${Servers[@]}"
        sudo scp somefolders.tar.gz [email protected].$i:~
EOF

现在问题出在for循环上,因为它是在远程主机上执行的,没有Servers参数,而且它本来就是一个独立的命令。我知道它为什么这样做,但我不知道如何正确地做到这一点?我该如何正确执行那个 for 循环?

我知道一个解决方案是使用不同的 IP 地址多次写入操作,但我们知道这不是编写代码的有效方法。

提前致谢。

答案1

您不必为此使用 bash 数组,只需使用以空格分隔的服务器列表:

$Server变量将由您的 shell 本地解释,并且传递给 10.1.1.10 的脚本将for i in 11 12 13 ;...在其内容中包含“ ”来发送。

Servers="11 12 13"

ssh -t [email protected] << EOF
    sudo tar -zcf somefolders.tar.gz ~/somefolders
    for i in $Servers ;do
        sudo scp somefolders.tar.gz [email protected].\$i:~
    done
EOF

相关内容