Bash 嵌套for循环shell脚本
运行这个脚本时,我意识到主机名中的每个元素都会使用密码进行尝试 如何使主机名中的第一个元素与密码中的第一个元素匹配,然后使第二个元素与第二个元素匹配,依此类推,而不是将主机名中的每个元素与密码中的每个元素匹配Bash 嵌套for循环shell脚本,bash,shell,Bash,Shell,运行这个脚本时,我意识到主机名中的每个元素都会使用密码进行尝试 如何使主机名中的第一个元素与密码中的第一个元素匹配,然后使第二个元素与第二个元素匹配,依此类推,而不是将主机名中的每个元素与密码中的每个元素匹配 也可以从文件中获取主机名和密码,而不是像我在代码中那样声明它们吗?使用数组,并迭代索引而不是元素 #!/bin/bash hostnames='admin node1 node2 node3' passwords='1234 1235 1236 1237' for i in $hostna
也可以从文件中获取主机名和密码,而不是像我在代码中那样声明它们吗?使用数组,并迭代索引而不是元素
#!/bin/bash
hostnames='admin node1 node2 node3'
passwords='1234 1235 1236 1237'
for i in $hostnames
do
for j in $passwords
do
sshpass -p $j ssh-copy-id root@$i -p 22
done
done
或者,与Biffen在评论中的建议类似:
hostnames=(admin node1 node2 node3)
passwords=(1234 1235 1236 1237)
for i in "${!hostnames[@]}"; do
sshpass -p "${passwords[i]}" ssh-copy-id root@"${hostnames[i]}" -p 22
done
读取-r主机密码时;做
sshpass-p“$password”ssh copy id root@“$hostname”-p 22
读取-r主机密码时完成;做sshpass;完成
?非常感谢您帮助我切普纳。如果可能的话,请您帮我解决这个问题:我在一个文件中存储了5个主机名和密码,分为两列:第一列为主机名,第二列为密码(主机名密码),如果我将每列存储到一个单独的数组中,就像一个带有主机名的数组和另一个带有密码的数组一样。是否可以从脚本中引用这些数组。如果没有,你能指导我如何从文件中获取主机名和密码,而不是像上面那样在脚本中提到它们。事先非常感谢您的帮助。
while read -r host password; do
sshpass -p "$password" ssh-copy-id root@"$hostname" -p 22
done <<EOF
admin 1234
node1 1235
node2 1236
node3 1237
EOF