我正在运行一个for循环,它调用另一个文件中的变量:
hostnames.txt
该文件中的变量如下所示:
export HOSTNAME_0=<hostname>
export HOSTNAME_1=<hostname>
export HOSTNAME_2=<hostname>
我正在尝试在这样的for循环中使用它们:
. hostnames.txt
for f in {0..10}; do
ssh $HOSTNAME_'{$f}'
if [$? !=0]; then
echo "Unable to SSH to server $HOSTNAME_'{$f}'"
exit 1
fi
然而它没有正确读取值,我不确定我缺少什么。会喜欢任何帮助。
答案 0 :(得分:3)
您需要构建变量名称并使用${!var}
访问它,例如:
. hostnames.txt
for f in {0..10}; do
hostnamevar=HOSTNAME_${f}
ssh ${!hostnamevar}
if [ $? -ne 0 ]; then
echo "Unable to SSH to server ${!hostnamevar}"
exit 1
fi
done
答案 1 :(得分:1)
如果您没有以&#34; HOSTNAME&#34;开头的其他变种,您可以使用
. hostnames.txt
for host in $(set | sed -n '/^HOSTNAME*=/ s/[^=]*=//p') ; do
ssh "${host}"
# or, for calling 2 commands:
# ssh "${host}" "echo 1 2 3; echo 4"
if [ $? -ne 0 ]; then
echo "Unable to SSH to server ${host}"
exit 1
fi
done