Concat 2变量并使用该变量使用shell脚本

时间:2016-10-17 17:33:24

标签: linux shell unix

我有一个包含以下属性的属性文件,

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

我尝试了不同的组合,但它有效。如何连接两个变量并使用该变量从属性文件中获取值。

2 个答案:

答案 0 :(得分: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使用从其余部分形成的变量的值   参数作为变量的名称;那么这个变量就是   扩展,该值用于替换的其余部分,   而不是参数本身的价值。这被称为间接的   扩张。如果参数是nameref,则会扩展为名称   参数引用而不是执行完整的变量   间接扩张。

答案 1 :(得分:0)

如果要从配置文件中获取值,可以使用grep

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

在配置文件来源时你可以做同样的事情:

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