来自linux中重新分配的变量的回声值

时间:2015-01-14 05:45:21

标签: linux bash

我刚刚写了一个bash脚本。我有一个配置文件来设置一些变量:

environment_information.conf

SIT_SERVER_IP=xxx.xx.xx.xx
SIT_SERVER_PASSWORD=******

我读取conf文件并尝试使用预定义的键回显

echo $SIT_SERVER_IP
echo $SIT_SERVER_PASSWORD

它没有任何问题,工作正常。在我的场景中,我将在执行shell脚本时读取值。

automation_script.sh

#!/bin/sh
. ./environment_information.conf
environment_name=$1"_SERVER_IP";
# test="${environment_prefix}";  # Error
test="${environment_name}";
echo "$.$test";
echo $SIT_SERVER_IP

我尝试使用输入和一些常量值从conf中获取值:

$ ./automation_script.sh SIT
$.SIT_SERVER_IP
xxx.xx.xx.xx
$

始终打印SIT_SERVER_IP字符串。

但是我期待来自这个SIT_SERVER_IP的conf文件的价值。

1 个答案:

答案 0 :(得分:3)

我认为你正在寻找间接扩张(Shell parameter expansion的第4段):

test=${!environment_name}

这会扩展为名称保存在$environment_name

中的变量的值

概念证明脚本,松散地基于您的代码(automation_script.sh):

: "${1:?}"  # Check that a parameter (SIT) was passed.

#. ./environment_information.conf
SIT_SERVER_IP="192.10.29.31"   # Surrogate for configuration file
SIT_SERVER_PASSWORD="secret"   # Surrogate for configuration file

echo "SIT_SERVER_IP=${SIT_SERVER_IP}"
echo "SIT_SERVER_PASSWORD=${SIT_SERVER_PASSWORD}"

environment_name="${1}_SERVER_IP"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

environment_name="${1}_SERVER_PASSWORD"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

运行脚本的输出:

$ bash automation_script.sh SIT
SIT_SERVER_IP=192.10.29.31
SIT_SERVER_PASSWORD=secret
SIT_SERVER_IP
SIT_SERVER_IP=192.10.29.31
SIT_SERVER_PASSWORD
SIT_SERVER_PASSWORD=secret
$

使用更新后的问题中的environment_information.conf文件:

: "${1:?}"

. ./environment_information.conf
#SIT_SERVER_IP="192.10.29.31"
#SIT_SERVER_PASSWORD="secret"

echo "SIT_SERVER_IP=${SIT_SERVER_IP}"
echo "SIT_SERVER_PASSWORD=${SIT_SERVER_PASSWORD}"

environment_name="${1}_SERVER_IP"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

environment_name="${1}_SERVER_PASSWORD"
echo "${environment_name}"
echo "${environment_name}=${!environment_name}"

运行产生:

$ bash automation_script.sh SIT
SIT_SERVER_IP=xxx.xx.xx.xx
SIT_SERVER_PASSWORD=******
SIT_SERVER_IP
SIT_SERVER_IP=xxx.xx.xx.xx
SIT_SERVER_PASSWORD
SIT_SERVER_PASSWORD=******
$