从 .properties 文件调用值?

从 .properties 文件调用值?

现在我有一个简单的脚本,我想调用一个 .properties 文件,然后打印该文件的结果,这就是我目前所拥有的

#Specific Set Variables 
SpecficStatus="Pass" #SetVariable 
timestamp() { date +"%a %d %b %Y %T %Z"; }
SpecficDate=$(timestamp)

echo $SpecficStatus
echo $SpecficDate

#Properties Call
file="savedState.properties"

#Echo out the file

while read LINE; do echo "$LINE"; done < savedState.properties

我的 savedState.properties 文件中有什么

WD_MANAGEGOLD_DATETIMESTAMP=Wed 20 May 2015 13:50:51 UTC
WD_MANAGEGOLD_SUCCESS=false
WD_MANAGERC_DATETIMESTAMP=Wed 20 May 2015 13:50:51 UTC
WD_MANAGERC_SUCCESS=false

正如您从脚本中看到的,我可以调用该文件并打印出结果,但我想要的是能够选择哪些值并将它们存储为变量以供以后在脚本中使用?

任何帮助都很好

答案1

您可以像这样导出它们。

#!/bin/bash
#Specific Set Variables 
SpecficStatus="Pass" #SetVariable 
timestamp() { date +"%a %d %b %Y %T %Z"; }
SpecficDate=$(timestamp)

echo $SpecficStatus
echo $SpecficDate

#Properties Call
file="savedState.properties"
#Echo out the file


while IFS== read -r VAR1 VAR2
do
    #echo "VAR1=$VAR1 : VAR2=$VAR2"
    export "$VAR1=$VAR2"
done < savedState.properties

echo "$WD_MANAGEGOLD_DATETIMESTAMP"
echo "$WD_MANAGEGOLD_SUCCESS"
echo "$WD_MANAGERC_DATETIMESTAMP"
echo "$WD_MANAGERC_SUCCESS"

打印出:

Pass
Wed 20 May 2015 12:24:26 EDT
Wed 20 May 2015 13:50:51 UTC
false
Wed 20 May 2015 13:50:51 UTC
false

答案2

使用,将的值grep存储到变量中,并将的值存储到变量中:WD_MANAGEGOLD_DATETIMESTAMPwd_managegold_datetimestampWD_MANAGEGOLD_SUCCESSwd_managegold_success

#!/bin/bash

# ...
wd_managegold_datetimestamp=$(< savedState.properties grep -Po '^WD_MANAGEGOLD_DATETIMESTAMP=\K.*')
wd_managegold_success=$(< savedState.properties grep -Po '^WD_MANAGEGOLD_SUCCESS=\K.*')
# ...

但在这种情况下,将相关值存储到数组中可能会很方便,因此将所有WD_MANAGEGOLDWD_MANAGERC值存储到两个wd_managegoldwd_managerc数组中:

#!/bin/bash

# ...
IFS=$'\n\r' GLOBIGNORE='*' wd_managegold=($(< savedState.properties grep -Po '^WD_MANAGEGOLD_.*=\K.*'))
IFS=$'\n\r' GLOBIGNORE='*' wd_managerc=($(< savedState.properties grep -Po '^WD_MANAGERC_.*=\K.*'))
# ...
  • IFS=$'\n\r'bash将 的内部字段分隔符设置为换行符和回车符,以便每个换行符/回车符分隔的值都存储到单个数组的字段中;

  • GLOBIGNORE='*':将bash内置GLOBIGNORE变量设置为*,这样匹配特殊文件名的值就不会被特殊处理

相关内容