如何在shell中使用其他文件中的值?

时间:2015-05-21 08:39:10

标签: bash shell if-statement terminal logic

现在我正在尝试修改一个脚本,该脚本将根据脚本中的一组设置值检查.properties文件中的值

但由于某种原因,当我调用它们不匹配的值时,这就是我到目前为止所做的,我相信也许正确存储了.properties值

#!/bin/bash 
SuccessfulDiffRun="true" 
timestamp() { date +"%a %d %b %Y"; }
TodaysDate=$(timestamp)
echo ""
echo $TodaysDate
echo ""
#Properties Call
file="savedState.properties" 
#Echo out the file
while read LINE; do echo "$LINE"; done < savedState.properties

#Check Values Hotpatch.
echo ""
echo "Running Checks HotPatch..."
if [ "$TodaysDate" = "$WD_MANAGEGOLD_DATETIMESTAMP" ]; then
    echo Dates Are A Match
    if [ "$SuccessfulDiffRun" = "$WD_MANAGEGOLD_SUCCESS" ]; then
        echo Diff Run Successful
        echo Hotpatch Run Was Successful
    else
        echo Diff Run Not Successful
        exit 0
    fi
else
    echo Dates Not A Match
    exit 0 
fi

#Check Values RC.
echo ""
echo "Running Checks RC..."
if [ "$TodaysDate" = "$WD_MANAGERC_DATETIMESTAMP" ]; then
    echo Dates Are A Match
    if [ "$SuccessfulDiffRun" = "$WD_MANAGERC_SUCCESS" ]; then
        echo Diff Run Successful
        echo RC Run Was Successful
    else
        echo Diff Run Not Successful
        exit 0
    fi
else
    echo Dates Not A Match
    exit 0 
fi

和.properties文件中的值

WD_MANAGEGOLD_DATETIMESTAMP=Wed 21 May 2015 
WD_MANAGEGOLD_SUCCESS=false
WD_MANAGERC_DATETIMESTAMP=Wed 21 May 2015 
WD_MANAGERC_SUCCESS=false

任何帮助都会很棒

4 个答案:

答案 0 :(得分:1)

如果只是read .properties文件,则不会创建变量。每行存储在LINE中,如果要将字符串作为代码执行,请使用eval

while read LINE; do eval $LINE; done < savedState.properties

但是请确保引用包含空格的字符串,如

WD_MANAGEGOLD_DATETIMESTAMP="Wed 21 May 2015"
WD_MANAGEGOLD_SUCCESS=false
WD_MANAGERC_DATETIMESTAMP="Wed 21 May 2015"
WD_MANAGERC_SUCCESS=false

另一个技巧是将文件作为脚本来源:

source savedState.properties

. savedState.properties

是完全相同的。

此外,时间戳并不意味着代表“2015年5月21日星期三”等日期的字符串。时间戳表示从1970年1月1日起的秒数(或毫秒)。这是一个数字,而不是一个字符串。

答案 1 :(得分:0)

创建一个查看属性文件的函数get_value。

function get_value {
   grep "^${1}=" savedState.properties | cut -d= -f2-
}
...
WD_MANAGERC_DATETIMESTAMP="$(get_value WD_MANAGERC_DATETIMESTAMP)"

答案 2 :(得分:0)

您可以使用不同的选项来使其正常工作。 首先,它是“2015年5月21日星期三”与任何东西都不匹配,因为它是“2015年5月21日星期四”......但这是一个细节。

如果解析包含bash变量定义的文件,则需要替换echo

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

使用eval(最终删除"

...
while read LINE; do eval $LINE; done < savedState.properties
...

您可以使用简单的source savedState.properties

替换整行

最后使用"

保护属性文件中的字符串定义
WD_MANAGEGOLD_DATETIMESTAMP="Thu 21 May 2015"
WD_MANAGEGOLD_SUCCESS="false"
WD_MANAGERC_DATETIMESTAMP="Thu 21 May 2015"
WD_MANAGERC_SUCCESS="false"

最佳, 诉

答案 3 :(得分:0)

如果你在当前脚本中source .properties文件(或其最终名称),正确的做法是首先检查它是否存在且可读,然后{{ 1}}:

source