Bash技巧:介绍一个可以增删改查键值对格式配置文件的Shell脚本( 三 )

< "${PARSECFG_filepath}"# 查看关联数组 key_values 的值.调试的时候,可以打开下面的注释.# declare -p key_values}# 操作配置文件的功能选项.建议外部调用者通过功能选项来指定要进行的操作.# 该函数最多接收两个参数:#第一个参数: 提供选项名,该选项名要求以'-'开头,才是合法选项.#第二个参数: 提供选项的参数. 部分选项后面需要跟着一个参数.# 当传入的选项被handle_config_option()函数处理时,该函数返回处理后的状态码.# 例如,处理成功返回0,失败返回非0. 当传入的选项不被该函数处理时,它返回127.handle_config_option(){if [ -z "${PARSECFG_filepath}" ]; then# 如果配置文件变量值为空,说明还没有解析配置文件,不能往下处理.echo "出错: 请先调用 open_config_file filename 来解析配置文件."return 1filocal option="$1"local argument="$2"case "${option}" in-l) show_config_file ;;-v) show_key_values ;;-i) search_value_from_file "${argument}" ;;-e) edit_config_file ;;-a) append_key_value "${argument}" ;;-d) delete_key_value "${argument}" ;;*) return 127 ;;esac# 当return语句不加上具体状态码时,它会返回上一条执行命令的状态码.return}使用 parsecfg.sh 脚本的例子假设有一个 testparsecfg.sh 脚本 , 具体的代码内容如下:
#!/bin/bashCFG_FILE="cfgfile.txt"# 通过 source 命令加载 parsecfg.sh 的脚本代码source parsecfg.sh# 调用 open_config_file 函数解析配置文件open_config_file "$CFG_FILE"# 调用 handle_config_option 函数处理 -v 选项.# 该选项以键值对的形式列出所有配置项.handle_config_option -v# 获取 am 这个键名对应的键值value=https://www.isolves.com/it/cxkf/bk/2020-07-27/$(get_value_by_key "am")echo "The value of 'am' key is: $value"# 使用 get_key_of_entry 函数从键值对中获取键名.该函数# 针对键值对自身进行处理,所给的键值对可以不在配置文件中.key=$(get_key_of_entry "a|adb logcat -b all")echo "The key of 'a|adb logcat -b' is: $key"这个脚本所调用的函数都来自于 parsecfg.sh 脚本 。
这个 testparsecfg.sh 脚本指定解析一个 cfgfile.txt 配置文件 。
该配置文件的内容如下:
am|frameworks/base/services/core/java/com/android/server/am/w|frameworks/base/wifi/java/android/net/wifi/把 parsecfg.sh 脚本、testparsecfg.sh 脚本、和 cfgfile.txt 配置文件都放到同一个目录下 。
然后给这两个脚本文件都添加可执行权限 。
执行 testparsecfg.sh 脚本 , 具体结果如下:
$ ./testparsecfg.shkey='am'value=https://www.isolves.com/it/cxkf/bk/2020-07-27/'frameworks/base/services/core/java/com/android/server/am/'key='w'value='frameworks/base/wifi/java/android/net/wifi/'The value of 'am' key is: frameworks/base/services/core/java/com/android/server/am/The key of 'a|adb logcat -b' is: a可以看到 , 在 testparsecfg.sh 脚本中通过 source 命令引入 parsecfg.sh 脚本.
之后可以调用 parsecfg.sh 脚本里面的代码来解析配置文件 , 非常方便 。
如果多个脚本需要解析多个不同的配置文件 , 可以在各自脚本中引入 parsecfg.sh 脚本 , 然后提供不同的配置文件名即可 。
 


【Bash技巧:介绍一个可以增删改查键值对格式配置文件的Shell脚本】


推荐阅读