2016-12-06 59 views
0

我的shell腳本工作從.properties文件中讀取配置屬性,下面是樣本配置無法檢索shell腳本鍵值

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

我已經爲下面寫了一個shell腳本,但這是行不通的任何人都可以請有外觀和指導我如何解決這個

#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

+0

我建議'源'您的屬性文件。 – Cyrus

+0

@Cyrus請問我可以讓我知道這個'source'不介意我知道shell腳本。 –

+0

您的文件「serverconfig.properties」已經具有正確的bash格式。使用'source serverconfig.properties',你可以使用你的文件中的所有變量,例如:'echo「$ RCTP_servername」' – Cyrus

回答

1

雖然eval不推薦的大部分時間最後一行,這裏是使用indirect-reference作爲

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}" 
1

看來你想使用變量的值作爲另一個變量的名稱。 請更換您使用以下

eval echo \"\$$servername_value\" 
+0

但我需要將它分配給一個變量,以便我可以稍後在我的腳本中使用這些值 –

+0

感謝它的工作,我做了一點修改'eval SERVERNAME = \「\ $$ servername_value \」 echo「$ SERVERNAME」' –