bash 脚本实现的配置文件(ini/inc.sh)的读写操作
2012-06-08 10:00
1011 查看
这两个bash 函数是以前写的,目的是对一个已经存在的ini配置文件进行修改和读取,当然实在Linux Bash Shell下进行的:
例如一个配置文件 config.ini
实例脚本:
更新兼容inc.sh的shell脚本配置文件:
测试:
例如一个配置文件 config.ini
# config.ini name = xiwang age = 27执行脚本,修改name=xiwang为name=Xiaoqiang Wang(Eric),期望的输出:
xiwang@ubuntu:~/Dev/BashConfig$ ./ConfigDemo.sh config.ini
contents of config.ini
----------------------------------------------
# config.ini name = xiwang age = 27
----------------------------------------------
<CFG_NAME> is Xiaoqiang Wang(Eric)
contents of config.ini
----------------------------------------------
# config.ini
name = Xiaoqiang Wang(Eric)
age = 27
----------------------------------------------
实例脚本:
#------------------------------------------------------------------------------ # model: cfg_get # args: [1] => IN:<configure-file> # [2] => IN:<key> # [3] => OUT:<value-as-env-var> # describe: get configure value by key from a configure file # example: # > cfg_get "./Anubis.ini" "Anubis.ORB1.NSLocation" "OUT_MYVAR" # > echo $OUT_MYVAR # file:///etc/iors/ACNS_GlobalDev.ior #------------------------------------------------------------------------------ # Usage: getcfg <in:file> <in:key> <out:valueENV> getcfg() { [[ -f "$1" && ! -z "$2" && ! -z "$3" ]] || return 1 export $3="$(cat "$1" | sed -n "/^$2/{ s~^[^=]*= \(.*\)$~\1~g; p; }" | tail -n 1)" } #------------------------------------------------------------------------------ # model: cfg_set # args: [1] => IN:<configure-file> # [2] => IN:<key> # [3] => IN:<value> # describe: set key = value to configure file # example: # > cfg_set "./Anubis.ini" "Anubis.ORB1.NSLocation" "file:///etc/iors/ACNS_GlobalDev.ior" # > cat "./Anubis.ini" # Anubis.ORB1.NSLocation = file:///etc/iors/ACNS_GlobalDev.ior #------------------------------------------------------------------------------ cfg_set() { test -f "$1" && test ! -z "$2" && test ! -z "$3" if [ $? -eq 0 ]; then sed '/^'"$2"' =/{ s~^.*$~'"$2"' = '"$3"'~g }' -i "$1" fi } WORKDIR=$PWD test -f "$1" && { echo "contents of config.ini" echo "----------------------------------------------" cat "$1" echo "----------------------------------------------" echo cfg_set "$1" "name" "Xiaoqiang Wang(Eric)" cfg_get "$1" "name" "CFG_NAME" echo echo "<CFG_NAME> is $CFG_NAME" echo echo "contents of config.ini" echo "----------------------------------------------" cat "$1" echo "----------------------------------------------" echo }
更新兼容inc.sh的shell脚本配置文件:
#!/bin/bash # File: wxConfigFiles.sh #set -x #------------------------------------------------------------------------------ # model: cfg_get # args: [1] => IN:<configure-file> # [2] => IN:<key> # [3] => OUT:<value-as-env-var> # describe: get configure value by key from a configure file # example: # > cfg_get "./Anubis.ini" "Anubis.ORB1.NSLocation" "OUT_MYVAR" # > echo $OUT_MYVAR # file:///etc/iors/ACNS_GlobalDev.ior #------------------------------------------------------------------------------ cfg_get() { test -f "$1" && test ! -z "$2" && test ! -z "$3" if [ $? -eq 0 ]; then export $3="$(cat "$1" | sed -n '/^'"$2"'/{ s~^[^=]*= \(.*\)$~\1~g; p; }' | tail -n 1)" fi } #------------------------------------------------------------------------------ # model: cfg_set # args: [1] => IN:<configure-file> # [2] => IN:<key> # [3] => IN:<value> # describe: set key = value to configure file # example: # > cfg_set "./Anubis.ini" "Anubis.ORB1.NSLocation" "file:///etc/iors/ACNS_GlobalDev.ior" # > cat "./Anubis.ini" # Anubis.ORB1.NSLocation = file:///etc/iors/ACNS_GlobalDev.ior #------------------------------------------------------------------------------ cfg_set() { test -f "$1" && test ! -z "$2" && test ! -z "$3" if [ $? -eq 0 ]; then sed '/^'"$2"' =/{ s~^.*$~'"$2"' = '"$3"'~g }' -i "$1" fi } # ----------------------------------------------------------------------------- # Configure a shell script # args: [1] => In, shell configure file # [2] => In, Key # [3] => In, Value # [4]*=> In, (q)uote or double (qq)uote, or no quote if not set. # ----------------------------------------------------------------------------- cfgsh() { [ -f $1 ] && [ ! -z "$2" ] && [ ! -z "$3" ] && { case "$4" in q) q="'" ;; qq) q='"' ;; *) q="" ;; esac sed '/^\(export \)\{0,1\}'"$2"'=/{ s~^\(\(export\)\{0,1\}[^=]*\)=.*$~\1='"$q$3$q"'~g; }' -i "$1" } } testf=cfgsh_$(date +"%Y%m%d%H%M%S").txt cat <<EOF >$testf UNISERV_HOME='' export UNISERV_HOME='' EOF cat $testf cfgsh $testf UNISERV_HOME ABCDEFG/HIJ q echo '>>>Change>>to>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' cat $testf cfgsh $testf UNISERV_HOME ~/Uniserv64 qq echo '>>>Change>>to>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' cat $testf cfgsh $testf UNISERV_HOME ~/Uniserv64 echo '>>>Change>>to>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>' cat $testf rm $testf
测试:
$ ~/migstuff/sh_template/wxConfigFiles.sh UNISERV_HOME='' export UNISERV_HOME='' >>>Change>>to>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> UNISERV_HOME='ABCDEFG/HIJ' export UNISERV_HOME='ABCDEFG/HIJ' >>>Change>>to>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> UNISERV_HOME="/home/xiwang/Uniserv64" export UNISERV_HOME="/home/xiwang/Uniserv64" >>>Change>>to>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> UNISERV_HOME=/home/xiwang/Uniserv64 export UNISERV_HOME=/home/xiwang/Uniserv64
相关文章推荐
- 用java读写ini配置文件的原因以及实现 示例
- Python实现读写INI配置文件的方法示例
- C# 文件的一些基本操作(转)//用C#读写ini配置文件
- C#常用操作类库二(ini配置文件读写)
- asp.net 操作INI文件的读写,读写操作本地ini配置文件
- Delphi中读写INI配置文件操作总结
- Shell脚本读取ini配置文件的实现代码2例
- php脚本中操作ini配置文件选项ini_get ini_set
- C#实现.ini文件读写操作
- C#实现ini文件读写操作
- Shell脚本读取ini配置文件的实现代码2例
- ini配置文件读写实现
- PHP 的ini配置文件的读写操作函数
- VC++操作INI配置文件的实现
- 一个简单的利用ini配置文件以及用户输入的交互进行文件夹内容拷贝的批处理文件脚本的实现
- 脚本引擎之----读取INI配置文件
- INI配置文件的替代品-XML配置文件的操作
- VC配置文件ini的读写
- 【Java】利用Java对配置文件操作实现Java程序的国际化
- 我的INI 配置文件读写动态库