2014-03-13 43 views
1

我有这样的内容一个键 - > value属性文件(my.prop):Bash - 如何将文件内容读入变量,该文件是从key-> value属性文件中读取的?

ROOT_PATH = /opt/user1/ 
REL_PATH = data/folder1/ 
CONF_FILENAME = my.conf 

在我的bash脚本,我只是读取这个文件,像这样:

#!/bin/bash 
PROP_FILE='my.prop' 
ROOT_PATH ='' 
REL_PATH='' 
CONF_FILENAME='' 

while read -r key eq value; do 
    case $key in 
     "ROOT_PATH") 
     ROOT_PATH=${value} 
     ;; 
    case $key in 
     "REL_PATH") 
     REL_PATH=${value} 
     ;; 
    case $key in 
     "CONF_FILENAME") 
     CONF_FILENAME=${value} 
     ;; 
    esac 
done < $PROP_FILE 

之后我想,以形成路径my.conf文件并阅读其内容,一些变量,像这样:

CONF_FULL_PATH=$ROOT_PATH$REL_PATH$CONF_FILENAME 
CONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}` 

如果我打印出CONF_FULL_PATH变量里面会有一些垃圾(三个子路径的一部分)。 并且在该行CONF_FILE_CONTENT=`cat ${CONF_FULL_PATH}`我都会有这样的错误信息 - :没有这样的文件或directoryta /文件夹1/

所以,我的问题是,我怎么能形成正确的路径,my.conf文件,并把它的内容给一些特定的变量?我已经试过source命令作为while循环的替代品。另外要建立一个合适的路径字符串,我已经使用了这个语句: $(dirname $ROOT_PATH)/$(dirname REL_PATH)/$(basename $CONF_FILENAME)但是这对我的观点来说看起来很奇怪。

任何帮助将是伟大的!

+0

'而读-r键EQ值;做声明“$ key = $ value”;完成<$ PROP_FILE'简化了你的循环。 – chepner

回答

1

如果您从my.prop文件中删除空格,则可以使用source(或.)读取其中的变量。这将使它更容易。

my.prop:

ROOT_PATH=/opt/user1/ 
REL_PATH=data/folder1/ 
CONF_FILENAME=my.conf 

然后你就可以直接在脚本中使用这些:

#!/bin/bash 
. my.prop 
CONF_FULL_PATH="${ROOT_PATH}${REL_PATH}${CONF_FILENAME}" 
CONF_FILE_CONTENT=$(cat "$CONF_FULL_PATH") 
+0

'tr -s'='= my.prop> my.prop.clean' – kojiro

+0

关于点运算符,点/句点**。**是“源”的同义词,我也尝试过。问题是如何根据从属性文件中读取的字符串来生成有效的**路径**。 重点是:如果我在这样连接后打印'CONF_FULL_PATH'如下: 'echo $ CONF_FULL_PATH' 输出将是: _my.conflder1/_这是不正确的,不知何故它解释不正确,'$( cat“$ CONF_FULL_PATH”)'会打印_my.conf:没有这样的文件或目录_。 – INlHELL

+0

即使在要连接的变量名称周围使用大括号,“echo $ CONF_FULL_PATH”的输出是否正确? –