Linux 脚本修改ini,Shell脚本读取ini配置文件的实现代码2例

一、简单版

参考stackoverflow的例子,改了一个出来:

while IFS='= ' read var val

do

if [[ $var == \[*] ]]

then

section=$(echo $var | sed 's/^\[\(.*\)\]$/\1/')

elif [[ $val ]]

then

if [ -z $section ];then

declare "${var}=$val"

else

declare "${section}.${var}=$val"

fi

fi

done < config.ini

使用的时候:

${section.key}

就可以读到变量啦。

二、复杂版

[comon]

ids=com1,com2,com3

files=profilefile

[com1]

key="name"

file="test"

[com2]

key="name1"

file="test"

[com3]

key="name2"

file="test"

取[com1]的key值我查了下,还好在ChinaUnix里面查到了命令(貌似一位叫wintty兄写的):

awk -F '=' '/\[com1\]/{a=1}a==1&&$1~/key/{print $2;exit}' config.ini

这样就简单取到值了。

查了下命令终于明白,命令分为两个部分:

先模式匹配到:[com1]然后执行动作:a=1,再接着有来个模式+命令

模式:“a==1&&$1~/key/”

a==1因为已经赋值了,所以执行下一步,如果$1第一个字段匹配key的值,则

打印第2项,紧接着退出,退出就不会打印到匹配[com2]和[com3]的key值.

需求会变得,现在变成取【com】几个key对应的值,提供的shell的脚本如下:

#!/bin/sh

getconfig()

{

SECTION=$1

CONFILE=$2

ENDPRINT="key\tfile\t"

echo "$ENDPRINT"

for loop in `echo $ENDPRINT|tr '\t' ' '`

do

#这里面的的SECTION的变量需要先用双引号,再用单引号,我想可以这样理解,

#单引号标示是awk里面的常量,因为$为正则表达式的特殊字符,双引号,标示取变量的值

#{gsub(/[[:blank:]]*/,"",$2)去除值两边的空格内容

awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE

done

}

#更改变量名称

CONFIGFILE=$1

echo "========================================================"

#文件名称

echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"

#取得ids中的每个id把,号分隔改成空格,因为循环内容要以空格分隔开来

profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`

#对于一个配置文件中的所有id循环

for OneCom in $profile

do

echo "--------------------------------------------------"

echo "COM:$OneCom"

#此处函数调用有时候不能用反引号,不然会出错,此处原由还不清楚知道的麻烦请告之

getconfig  $OneCom  $CONFIGFILE

echo "\n"

echo "--------------------------------------------------"

#break

done

echo "========================================================"

执行的结果如下:

$ one.sh File

========================================================

+++ConfigName:File+++++++++++++++++++++++++++++++

--------------------------------------------------

COM:com1

key     file

name    file1

--------------------------------------------------

--------------------------------------------------

COM:com2

key     file

name1   file2

--------------------------------------------------

--------------------------------------------------

COM:com3

key     file

name2   file3

--------------------------------------------------

嘿嘿需求又变了,配置文件有多个,怎么取多个文件的配置项嘛:

#!/bin/sh

getconfig()

{

SECTION=$1

CONFILE=$2

ENDPRINT="key\tfile\t"

echo "$ENDPRINT"

for loop in `echo $ENDPRINT|tr '\t' ' '`

do

awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE

done

}

#显示的多个文件名将多行的回车符转成逗号分隔符

CONFIGFILES=`ls $1|tr '\n' ','`

#查看到底有多个配置文件

_Num=`echo $CONFIGFILES|tr -cd \,|wc -c`

#临时变量保存配置多个文件

_TMPFILES=$CONFIGFILES

while [ $_Num -ge 1 ]

do

#得到一个文件

CONFIGFILE=`echo $_TMPFILES|cut -d ',' -f1`

#余下的文件

_TMPFILES=`echo $_TMPFILES|cut -d ',' -f2-`

#配置文件数量减一

_Num=$(($_Num-1))

echo "========================================================"

#文件名称

echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"

profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`

#对于一个配置文件中的所有id循环

for OneCom in $profile

do

echo "--------------------------------------------------"

echo "COM:$OneCom"

getconfig  $OneCom  $CONFIGFILE

echo "\n"

echo "--------------------------------------------------"

#break

done

echo "========================================================"

done

两个小时终于写好了,请各位转载的时候不要忘记加上我的地址哦,也不枉费我辛苦一场。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯2017初赛-油漆面积-枚举

题目描述 X星球的一批考古机器人正在一片废墟上考古。该区域的地面坚硬如石、平整如镜。 管理人员为方便&#xff0c;建立了标准的直角坐标系。 经过各种测量&#xff0c;每个机器人都会报告一个或多个矩形区域&#xff0c;作为优先考古的区域。 矩形的表示格式为(x1,y1,x2,y2…

临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障

临近年关&#xff0c;咨询师提出360、搜狗急速浏览器无法单点登录到公司核心产品WD: 重定向过多。现象经过测试&#xff0c; 出现单点登陆故障的是搜狗、360等双核浏览器(默认使用Chrome内核)&#xff0c; 较新式的Edge、Chrome、Firefox均未出现此障碍。Developer tool监测不到…

Asp.Net Core 已支持 gRPC-Web !!

grpc-dotnet 项目在 PR #695 完成了 ASP.NET Core 服务与 .NET Core gRPC 客户端的 gRPC-Web 实现。虽然目前还是实验性项目&#xff0c;但是并不阻碍我们为之兴奋。下面我们来看看如何使用。gRPC-Web 简介gRPC-Web 允许从浏览器应用程序使用 gRPC&#xff0c;gRPC-Web 支持在新…

蓝桥杯2017初赛-打印大X-找规律

题目描述 小明希望用星号拼凑&#xff0c;打印出一个大X&#xff0c;他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格&#xff0c;所有的空白位置都以句点符来代替。 要求输入两个整数m n&#xff0c;表示笔的宽度&#xff0c;X的高度。 输入 输入存在多组数据 …

排查生产问题linux命令,排查问题所用到的一些Linux命令实践(不定期更新。。)...

一、前言线上问题排查可能是每个程序员都会经历的。在排查的过程中&#xff0c;往往会用到很多Linux命令&#xff0c;也会产生一些很实用的技巧。本博文通过分析一次线上问题排查的过程&#xff0c;把所有用到的命令串起来。每个Linux命令的参数往往会很多&#xff0c;下面对Li…

蓝桥杯2015决赛-方格填数-枚举 or dfs

题目描述 在2行5列的格子中填入1到10的数字。 要求&#xff1a;相邻的格子中的数&#xff0c;右边的大于左边的&#xff0c;下边的大于上边的。 如下图所示的2种&#xff0c;就是合格的填法。 请你计算一共有多少种可能的方案。 输出 请输出该整数&#xff0c;不要输出任何多…

【实战 Ids4】║ 在Swagger中调试认证授权中心

回家的路上照顾好自己哟~大家好&#xff0c;老张已经顺利到家啦&#xff0c;闲的无事写两篇文章冒个泡吧&#xff0c;其实写的内容都是群友提出来的问题&#xff0c;简单的我会在群里直接提供思路&#xff0c;麻烦的我就写个文章说明一下吧&#xff0c;也是自己的一个记录作用&…

linux 集群 java,Linux Tomcat 集群 利用记实1--搭建javaWeb运行情况

前段时候一向在搞linux&#xff0c;有很多多少工具只曩昔没有做过。影象不是那么深刻&#xff0c;此刻把历程记实下来&#xff0c;以备今后盘问。一&#xff1a;起首说一下我们的计划&#xff0c; 一共有六台办事器&#xff0c;此中两台安置Oracle 10g做数据库集群(这个不在这篇…

蓝桥杯2016初赛-网友年龄-枚举

题目描述 某君新认识一网友。 当问及年龄时&#xff0c;他的网友说&#xff1a;“我的年龄是个2位数&#xff0c;我比儿子大27岁,如果把我的年龄的两位数字交换位置&#xff0c;刚好就是我儿子的年龄” 请你计算&#xff1a;网友的年龄一共有多少种可能情况&#xff1f; 输出…

linux下yum安装pgsql,CentOS7使用yum安装PostgreSQL和PostGIS的方法

1.更新yum源CentOS7默认yum源的PostgreSQL版本过低&#xff0c;不适合在本版本上使用。在https://yum.postgresql.org/repopackages.php上找到适合CentOS7的RPM源&#xff0c;复制其url地址&#xff0c;使用yum安装。同时安装epel(Extra Packages for Enterprise Linux 7)&…

在 Blazor WebAssembly 中使用 gRPC-Web

对于单页面应用程序&#xff0c;gRPC-Web 是 JSON-over-HTTP 的一种方便、高性能的替代方案。如果你已经了解关于 gRPC 和 gRPC-Web 的一切&#xff0c;你可以跳到 添加 gRPC 服务到一个Blazor WebAssembly 应用程序 一节。如果你只是想要一些简单的 Blazor WebAssembly gRPC-…

蓝桥杯2016初赛-生日蜡烛-枚举

题目描述 某君从某年开始每年都举办一次生日party&#xff0c;并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来&#xff0c;他一共吹熄了236根蜡烛。 请问&#xff0c;他从多少岁开始过生日party的&#xff1f; 输出 请填写他开始过生日party的年龄数。 代码如下&#…

【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发...

《ASP.NET Core 微服务实战》译者序&#xff1a;https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-translator/“微服务”的概念在 2014 年正式提出之后&#xff0c;越来越多的团队开始用它来设计自己的业务系统&#xff0c;各种微服务框架和开发过程管理…

蓝桥杯2016初赛-有奖猜谜-模拟

题目描述 小明很喜欢猜谜语。最近&#xff0c;他被邀请参加了X星球的猜谜活动。 每位选手开始的时候都被发给777个电子币。 规则是&#xff1a;猜对了&#xff0c;手里的电子币数目翻倍&#xff0c;猜错了&#xff0c;扣除555个电子币, 扣完为止。 小明一共猜了15条谜语。战果…

linux6.5dns装什么,CentOS6.5安装DNS服务

1&#xff0c;安装软件包yum install -y bind2&#xff0c;备份配置文件cp /etc/named.conf /etc/named.conf_bak3&#xff0c;编辑配置文件vim /etc/named.conf//// named.conf//// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS// server as a c…

【在路上2】快递的运单轨迹

通达系早期的扫描数据高度类同&#xff0c;业务员从商家或散客收件之后&#xff0c;PDA做一次揽收操作。业务员或承包区把快件送到网点&#xff0c;晚上由网点派车统一送到转运中心&#xff0c;此时网点做一次发件扫描&#xff0c;转运中心做一次到件扫描。转运中心分拣后发出&…

蓝桥杯2017初赛-正则问题

题目描述 考虑一种简单的正则表达式&#xff1a;只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是&#xff1a; xxxxxx&#xff0c;长度是6 输入 输入一个由x()|组成的正则表达式。输入…

linux apache找不到woff2,使服务器Nginx(或者Apache)支持woff2等字体文件

为了在前端正确地显示字体&#xff0c;浏览器必须使用正确的http header来接受字体文件。如果服务器没有设置要求的头信息&#xff0c;那么有些浏览器就会在控制台报错或者直接不能显示。可能你的服务器已经配置好了&#xff0c;你无须再动任何东西。如果没有配置好&#xff0c…

.NET Core验证ASP.NET密码

.NET Core验证ASP.NET密码随着 .NETCore的持续更新和完善&#xff0c;越来越多的机构已经选择或者升级为 .NETCore。但由于技术不完全相同&#xff0c;不可能所有应用/数据库都能无缝迁移&#xff0c;因此 ASP.NETCore和传统 ASP.NET之间多少会存在一些挑战&#xff0c;需要更多…

蓝桥杯2017初赛-9数算式-dfs

题目描述 观察如下的算式&#xff1a;9213 x 85674 789314562 左边的乘数和被乘数正好用到了1~9的所有数字&#xff0c;每个1次。 而乘积恰好也是用到了1~9的所有数字&#xff0c;并且每个1次。 请你借助计算机的强大计算能力&#xff0c;找出满足如上要求的9数算式一共有多少…