在彼此内部使用变量Bash

时间:2017-04-14 14:27:51

标签: bash loops export

我正在运行一个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

然而它没有正确读取值,我不确定我缺少什么。会喜欢任何帮助。

2 个答案:

答案 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