我正在使用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_value
是test1
尽管大多数时候不建议使用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"