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