无法从shell脚本检索钥匙值



我正在使用shell脚本来读取来自.properties文件的配置属性,以下是示例config

RCTP_servername=test1
RCTP_databasename=test2
RCTP_portnumber=test3
RCTP_username=test4
RCTP_password=test5

我写了一个如下所示的壳脚本,但它行不通,任何人都可以看一下并指导我如何解决这个

#building the keys based on environment
environment=RCTP
servername_key="$environment"_servername
databasename_key="$environment"_databasename
portnumber_key="$environment"_portnumber
username_key="$environment"_username
password_key="$environment"_username
#read the config.properties files 

file=serverconfig.properties
if [ -f "$file" ]
then
 echo "$file found."
 while IFS='=' read -r key value
 do
  key=$(echo $key )
  eval "${key}='${value}'"
 done < "$file"
servername_value=${servername_key}
databasename_value=${databasename_key}
portnumber_value=${portnumber_key}
username_value=${username_key}
password_value=${password_key}
else
  echo "$file not found."
fi
echo  "$servername_value"

,但是当我尝试运行它时,我会得到以下的,错误是./test_script_fte.sh: line 23: ${servername_key}: bad substitution

预期的输出是执行echo $servername_valuetest1

尽管大多数时候不建议使用eval,但这是一种使用间接引用为

的解决方案
echo  "${!servername_value}"

我还将逻辑调整为source属性文件,而不是使用逻辑中的eval。使用以下完整的脚本。

#!/bin/bash
#building the keys based on environment
environment=RCTP
servername_key="$environment"_servername
databasename_key="$environment"_databasename
portnumber_key="$environment"_portnumber
username_key="$environment"_username
password_key="$environment"_username
#read the config.properties files 

file=serverconfig.properties
if [ -f "$file" ]
then
    echo "$file found."
    # sourcing the properties file in the current shell to fetch the values
    source "$file"
    servername_value=${servername_key}
    databasename_value=${databasename_key}
    portnumber_value=${portnumber_key}
    username_value=${username_key}
    password_value=${password_key}
else
    echo "$file not found."
fi
echo  "${!servername_value}"
echo  "${!databasename_value}"
echo  "${!portnumber_value}"
echo  "${!username_value}"
echo  "${!password_value}" 

似乎您想将变量的值用作另一个变量的名称。请用以下线替换您的最后一行

eval echo "$$servername_value"

最新更新