读取配置文件的shell脚本实现

(本人正在参加2015博客之星评选,诚邀你来投票,谢谢:http://vote.blog.csdn.net/blogstar2015/candidate?username=zhouzxi)

最近,在从事开发工作的过程中,遇到了一个需求:用shell脚本实现对配置文件的读取,并将读取到的配置项写入到新的文件中。

为了完成该需求,我们考虑使用awk命令,该命令把文件中的内容逐行的读入,按照特定的规则对每行记录进行处理。

例如,我们要从文件Config.ini(位于当前用户的etc目录下)中获取各个配置项的值,并将之写入到NetworkInfo.txt文件中。其中,Config.ini文件的内容如下:

[network]
; ip of database
ip=10.10.10.10
; port of database
port=9999

我们编写如下的shell脚本GetDatabaseConfig.sh:

#!/bin/ksh

CFG_FILE=$HOME/etc/Config.ini

IP=` awk '$1~/\[.*/{_cdr_par_=0}\
         $0 ~ /^ *\[ *network *\]/ {_cdr_par_=1}\
         $0~/^[\011 ]*ip *=.*/ { if(_cdr_par_==1) { sub("="," "); print $2; exit 0} }\
         ' ${CFG_FILE}`

PORT=` awk '$1~/\[.*/{_cdr_par_=0}\
          $0 ~ /^ *\[ *network *\]/ {_cdr_par_=1}\
         $0~/^[\011 ]*port *=.*/ { if(_cdr_par_==1) { sub("="," "); print $2; exit 0} }\
         ' ${CFG_FILE}`

main()
{
    echo "ip =" $IP
    echo "port =" $PORT

    echo "[network]" >> NetworkInfo.txt
    echo "ip=$IP" >> NetworkInfo.txt
    echo "port=$PORT" >> NetworkInfo.txt

    echo "finish !!!!!!!!!!!"
}

## Execute main function
main $*

将该脚本上传到Linux机器上,并使用“chmod 777 GetDatabaseConfig.sh”修改该脚本的权限,然后运行“./GetDatabaseConfig.sh”命令,结果如下:

ip = 10.10.10.10
port = 9999
finish !!!!!!!!!!!

同时,可以看到在当前目录下生成了NetworkInfo.txt文件,其内容为:

[network]
ip=10.10.10.10
port=9999

本文中的shell脚本已提交到GitHub上,欢迎下载阅读:https://github.com/zhouzxi/GetDatabaseConfig

参考资料:
1.http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html
2.http://www.cnblogs.com/repository/archive/2011/05/13/2045927.html

时间: 2024-08-03 03:50:45

读取配置文件的shell脚本实现的相关文章

Shell脚本读取标准ini配置文件Demo_linux shell

ini DEMO 复制代码 代码如下: [TESTFTP] host=127.0.0.1 name=my pass=mylove type=ftp [TESTSSH] host=127.0.0.1 name=my pass=mylove type=ssh [END] Shell脚本: 复制代码 代码如下: initConf() { HOSTID=$1 CONF=$2 echo "----cat----" cat $CONF \\     | grep -v ^$ \\     | se

如何使用linux shell脚本读配置文件,根据不同段落执行不同操作

问题描述 如何使用linux shell脚本读配置文件,根据不同段落执行不同操作 配置文件格式内容如下: [FILENAME] 111111111 222222222 [SHLIB] 22222 22222 [SQL] 333333333 222222222

Linux下将数据文件的指定域读取到shell脚本中

这个例子说明了怎样在Linux下shell脚本中从数据文件读取特定的域(field)并进行操作.例如,假设文件employees.txt的格式是{employee-name}:{employee-id}:{department-name},以冒号进行划分,如下所示. $ cat employees.txt Emma Thomas:100:Marketing Alex Jason:200:Sales Madison Randy:300:Product Development Sanjay Gupt

Shell脚本实现批量生成nagios配置文件_linux shell

如果管理的站点和服务器较多的情况下,每次修改配置文件都相当痛苦.因而想到了用shell脚本来批量生成配置文件和配置数据.下面这个脚本是为了批量生成nagios监控配置文件的一个shell脚本程序.其原理是事先定义一个shell脚本模板,然后每个需要监控的站点复制一份模板替换掉模板文件里面的变量. 1.准备模板文件webcheck.template more webcheck.template ###################WEBURL define start##############

Shell脚本一次读取文件中一行的2种写法_linux shell

写法一: 复制代码 代码如下: #!/bin/bash while read line do       echo $line     #这里可根据实际用途变化 done < urfile 写法二: 复制代码 代码如下: #!/bin/bash cat urfile | while read line do     echo $line done 注意:以上代码中urfile 为被读取的文件 Shell读取文本文件 方法一:通过命令获取所需内容,传递给变量 复制代码 代码如下: var1=$(g

8个实用的Shell脚本分享

  这篇文章主要介绍了8个实用的Shell脚本分享,本文给出了判断输入为数字.字符或其他.求平均数.自减输出.在文件中添加前缀.批量测试文件是否存在等实用脚本,需要的朋友可以参考下 几个Shell脚本的例子,觉得还不错. [例子:001]判断输入为数字,字符或其他 代码如下: #!/bin/bash read -p "Enter a number or string here:" input case $input in [0-9]) echo -e "Good job, Y

《Linux命令行与Shell脚本编程大全第2版》读书笔记

公司说不准用云笔记了,吓得我赶紧把笔记贴到博客上先..... 近3年前的了,只有一半的章节,后面的没空记录了.... 第1章 可以cat /proc/meminfo文件来观察Linux系统上虚拟内存的当前状态 ipcs命令专门用来查看系统上的当前共享内存页面 Ubuntu使用一个表来管理在系统开机时要自动启动的进程,在/etc/init.d目录,可将开机时启动或停止某个应用的脚本放在这个目录下.这些脚本通过/etc/rcX.d目录下的入口启动,这里X代表运行级(run level) Linux才

shell脚本学习指南[六](Arnold Robbins &amp; Nelson H.F. Beebe著)_linux shell

学shell到现在了,一直以为自己不会犯一个大家常说的非常二的问题,结果这本书最后的时候犯了个十分2的事,晚节不保啊!!!我在测试文件路径下除了通配符*和?外还能用啥正则那样的东西,结果就在$HOME下执行了rm .* ...好吧,蛋疼了一下午!还木找回任何一个配置文件.警示后人,千万别使用rm试通配符!任何时候小心使用rm! 第十四章shell可移植性议题和扩展 可以先通读这篇文章.想写出好的可移植性shell,不仅要了解各种shell版本间的差异,还要有很多编程技巧,比如尽量从环境变量中获取

shell脚本学习指南[三](Arnold Robbins &amp; Nelson H.F. Beebe著)_linux shell

今天木有冷笑话,只有一个噩耗.噩耗是:今天木有冷笑话!!!不要总想着冷笑话嘛,有点追求,听毛主席的话:好好学习,天天向上! 第七章输入输出.文件与命令执行 学C的应该了解标准输入输出和错误输出吧?感觉总打很多字进度太慢,所以一直在省略类似C的东西,也方便以后看这篇文章的人能够快速学完shell脚本(或者是快速看完这本书). 读取行read命令是重要方式之一,它可以自标准输入读取行后,通过shell字段切割的功能(使用$IFS)进行切分,第一部分给第一个变量,第二部分给第二个,类推.如果切割单词多