如何从Shell脚本中的属性文件中获取变量值?

时间:2015-03-24 11:04:48

标签: shell unix sh

我有一个属性文件test.properties,其内容如下:

x.T1 = 125
y.T2 = 256
z.T3 = 351

我想读取整个文件,每当它找到y.T2时,它应该将值赋给shell脚本中的某个变量并回显该值。

我是shell脚本的新手。帮帮我,提前谢谢

3 个答案:

答案 0 :(得分:2)

您希望在脚本的循环中使用read。虽然您可以source一个文件,但如果=符号周围有空格,它就不起作用。这是一种处理文件的方法:

#!/bin/sh

# test for required input filename
if [ ! -r "$1" ]; then
    printf "error: insufficient input or file not readable.  Usage: %s property_file\n" "$0"
    exit 1
fi

# read each line into 3 variables 'name, es, value`
# (the es is just a junk variable to read the equal sign)
# test if '$name=y.T2' if so use '$value'
while read -r name es value; do
    if [ "$name" == "y.T2" ]; then
        myvalue="$value"
    fi
done < "$1"

printf "\n myvalue = %s\n\n" "$myvalue"

<强>输出

$ sh read_prop.sh test.properties

 myvalue = 256

答案 1 :(得分:2)

选中此项,将完全有帮助:

expVal=`cat test.properties | grep "y.T2" | cut -d'=' -f2`

答案 2 :(得分:0)

我知道这是一个老问题,但我刚刚遇到过这个问题,如果我理解正确,那么问题就是从属性文件中获取特定键的值。 为什么不使用grep找到密钥和awk来获取值呢?

使用grep和awk从test.properties中提取值

Telecallerfirststep::whereDate('created_at','=',date('Y-m-d'))->groupBy('leadsid')->count(); 

如果&#39; =&#39;之后有一个空格,则该值将包含空格。修剪前导空格

export yT2=$(grep -iR "^y.T2" test.properties | awk -F "=" '{print $2}')
echo y.T2=$yT2

修剪参考: How to trim whitespace from a Bash variable?。 参考链接提供的解释。