想要使用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 值。
因此,想知道如何从属性文件中读取值。
答案 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}
基本上对变量进行两次计算:
student_name_1
foo
请注意,这是rarely a good idea,并且几乎总是首选使用数组。