2016-10-17 59 views
0

我有下面的屬性的屬性文件,以獲得從屬性文件中值,的毗連2個變量和使用該變量使用shell腳本

apache_ip=127.0.0.1 
apache_user=root 

現在在我的shell腳本,我不喜歡的東西下面,

source $1 
service=$2 #$2=apache 
variable=${service}_ip 
serviceIP=${variable} 
echo ${serviceIP} 

我想要得到的輸出127.0.0.1,但產量apache_ip

我嘗試了不同的組合,但它力度的工作。如何連接兩個變量並使用該變量從屬性文件獲取值。

+0

什麼是'service = $ 2($ 2 = apache)'應該這樣做? –

+0

我傳遞服務的價值作爲論據。第一個參數是屬性文件。第二個參數是apache, – Jugi

+0

有什麼爭論? – chepner

回答

2

您是否正在尋找?我假設你正在使用bash。

service="apache" 
apache_ip="127.0.0.1" 
variable="${service}_ip" 
ip="${!variable}" 
echo "$ip" 

打印127.0.0.1。

查看here瞭解更多關於bash shell中shell參數擴展的信息。

如果參數的第一個字符是一個感嘆號(!),和 參數不是nameref,它引入了可變 一個間接層。 Bash使用參數的其餘 形成的變量的值作爲變量的名稱;這個變量然後被擴展爲 ,並且該值用於替換的其餘部分,即 而不是參數本身的值。這被稱爲間接 擴展。如果參數是一個名稱參數,則這將展開爲由參數引用的變量名稱 ,而不是執行完整的 間接擴展。

+0

你的解決方案解決了我的問題,我在腳本中包含了ip =「$ {!variable}」,它工作正常,你能告訴我什麼是not(! )操作在這裏做了訣竅。? – Jugi

+1

在手冊頁中搜索間接參數擴展。 – chepner

0

當你想從配置文件中的值,你可以使用grep

configfile=$1 
service=$2 
serviceIP=$(grep "^${service}_ip=" configfile|cut -d= -f2-) 
echo "serviceIP=${serviceIP}" 

你可以做同樣的當CONFIGFILE已經來源:

serviceIP=$(set | grep "^${service}_ip=" |cut -d= -f2-) 
echo "serviceIP=${serviceIP}"