使用 bash shell 脚本从 属性 文件中读取多个值
read multiple values from a property file using bash shell script
想使用 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 值被打印出来。
因此,想知道如何从属性文件中读取值。
您可以使用 ${!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
可以使用间接扩展:
std_Name=student_name_$i
echo "${!std_Name}"
表达式${!var}
基本上对变量求值两次:
- 第一次评价:
student_name_1
- 第二次评价:
foo
请注意,这是 rarely a good idea 并且几乎总是首选使用数组。
想使用 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 值被打印出来。
因此,想知道如何从属性文件中读取值。
您可以使用 ${!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
可以使用间接扩展:
std_Name=student_name_$i
echo "${!std_Name}"
表达式${!var}
基本上对变量求值两次:
- 第一次评价:
student_name_1
- 第二次评价:
foo
请注意,这是 rarely a good idea 并且几乎总是首选使用数组。