是的,可以比较简单的获取配置名和值,通过数组索引进行关联。读取您的配置可以这样完成:
#!/bin/bash
test -r "$1" || { echo "error: unable to read conf file [$1]\n"; exit 1; }
declare -a tag
declare -a data
let index=0
while read line || test -n "$line"; do
tag[index]="${line%%\=*}"
data[index]="${line##*\>}"
((index++))
done < "$1"
for ((i=0; i<${#tag[@]}; i++)); do
printf " %18s %s\n" "${tag[$i]}" "${data[$i]}"
done
读取配置文件后,配置名称标签和配置值分别存储在数组tag 和value 中:
pt_user_name xxxx
pt_passwd Junly@2014
jrnl_source_folder x/y/v
pt_source_folder /x/y/r/g
css_source_folder /home/d/g/h
此时,您将决定如何使用它们,无论是作为密码还是作为目录。你可能需要写几个函数,但是给定一个标签的基本函数,得到正确的数据可以这样完成:
function getvalue {
test -n "$1" || { echo "error in getvalue, no data supplied"; return 1; }
for ((i=0; i<${#tag[@]}; i++)); do
if test "$1" = "${tag[$i]}"; then
echo " eval cmd ${data[$i]}"
return $i
fi
done
return -1
}
echo -e "\nget value for 'jrnl_source_folder'\n"
getvalue "jrnl_source_folder"
该函数将返回数据值的索引并且可以执行任何需要的命令。您似乎有目录路径和密码,因此您可能需要每个功能。为了说明,示例的输出为:
get value for jrnl_source_folder
eval cmd x/y/v
您还可以在 BASH 的更高版本中使用关联数组将标记和数据存储在单个关联数组中。您还可以在标签和数据值上使用indirect references 来处理它们。我只是在示例中采用了直截了当的方法。