使用bash shell脚本从属性文件中读取多个值

时间:2015-06-11 13:07:42

标签: bash shell properties

想要使用shell脚本从属性文件中读取多个值

我的属性文件看起来如下所示,我之后添加它的原因是为了确保,如果以后更多的学生加入我只需要在属性文件中添加而不更改shell脚本中的任何内容。

student.properties

total_student=6
student_name_1="aaaa"
student_name_2="bbbb"
student_name_3="cccc"
student_name_4="dddd"
student_name_5="eeee"

当我在脚本下面运行时,我没有得到所需的输出,用于从属性文件中读取学生姓名

student.sh

#!/bin/bash
. /student.properties

i=1
while [ $i -lt $total_student ]
do
    {
        std_Name=$student_name_$i
        echo $std_Name

        #****** my logic *******

    } || {
        echo "ERROR..."
    }
    i=`expr $i + 1`
done

输出是这样的

1
2
3
4
5

我知道脚本没有为 $ student_name _ 获取任何内容,因此只会打印 $ i 值。

因此,想知道如何从属性文件中读取值。

2 个答案:

答案 0 :(得分:2)

您可以使用${!foo}进行变量名称插值。如果$foo"bar",则${!foo}会为您提供$bar的值。在您的代码中意味着更改

std_Name=$student_name_$i

var=student_name_$i
std_Name=${!var}

或者,您可以将名称存储在数组中。然后你就不必进行任何解析了。

<强> student.properties

student_names=("aaaa" "bbbb" "cccc" "dddd" "eeee")

<强> student.sh

#!/bin/bash
. /student.properties

for student_name in "${student_names[@]}"; do
    ...
done

答案 1 :(得分:0)

您可以使用间接扩展:

std_Name=student_name_$i
echo "${!std_Name}"

表达式${!var}基本上对变量进行两次计算:

  1. 首次评估:student_name_1
  2. 第二次评估:foo
  3. 请注意,这是rarely a good idea,并且几乎总是首选使用数组。