Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5003057
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: LINUX

2013-06-20 14:08:59


  1. [comon]
  2. ids=com1,com2,com3
  3. files=profilefile
  4. [com1]
  5. key="name"
  6. file="test"
  7. [com2]
  8. key="name1"
  9. file="test"
  10. [com3]
  11. key="name2"
  12. file="test"
  13. 取[com1]的key值我查了下,还好在ChinaUnix里面查到了命令(貌似一位叫wintty兄写的):
  14. awk -F '=' '/\[com1\]/{a=1}a==1&&$1~/key/{print $2;exit}' config.ini
  15. 这样就简单取到值了。
  16. 查了下命令终于明白,命令分为两个部分:
  17. 先模式匹配到:[com1]然后执行动作:a=1,再接着有来个模式+命令
  18. 模式:“a==1&&$1~/key/”
  19. a==1因为已经赋值了,所以执行下一步,如果$1第一个字段匹配key的值,则
  20. 打印第2项,紧接着退出,退出就不会打印到匹配[com2]和[com3]的key值.
  21. -------------------------------------------------------------
  22. 需求会变得,现在变成取【com】几个key对应的值,提供的shell的脚本如下:
  23. #!/bin/sh
  24. getconfig()
  25. {
  26. SECTION=$1
  27. CONFILE=$2
  28. ENDPRINT="key\tfile\t"
  29. echo "$ENDPRINT"
  30. for loop in `echo $ENDPRINT|tr '\t' ' '`
  31. do
  32. #这里面的的SECTION的变量需要先用双引号,再用单引号,我想可以这样理解,
  33. #单引号标示是awk里面的常量,因为$为正则表达式的特殊字符,双引号,标示取变量的值
  34. #{gsub(/[[:blank:]]*/,"",$2)去除值两边的空格内容
  35. awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE
  36. done
  37. }
  38. #更改变量名称
  39. CONFIGFILE=$1
  40. echo "========================================================"
  41. #文件名称
  42. echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
  43. #取得ids中的每个id把,号分隔改成空格,因为循环内容要以空格分隔开来
  44. profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
  45. #对于一个配置文件中的所有id循环
  46. for OneCom in $profile
  47. do
  48. echo "--------------------------------------------------"
  49. echo "COM:$OneCom"
  50. #此处函数调用有时候不能用反引号,不然会出错,此处原由还不清楚知道的麻烦请告之
  51. getconfig $OneCom $CONFIGFILE
  52. echo "\n"
  53. echo "--------------------------------------------------"
  54. #break
  55. done
  56. echo "========================================================"
  57. 执行的结果如下:
  58. $ one.sh File
  59. ========================================================
  60. +++ConfigName:File+++++++++++++++++++++++++++++++
  61. --------------------------------------------------
  62. COM:com1
  63. key file
  64. name file1
  65. --------------------------------------------------
  66. --------------------------------------------------
  67. COM:com2
  68. key file
  69. name1 file2
  70. --------------------------------------------------
  71. --------------------------------------------------
  72. COM:com3
  73. key file
  74. name2 file3
  75. --------------------------------------------------
  76. ========================================================
  77. 嘿嘿需求又变了,配置文件有多个,怎么取多个文件的配置项嘛:
  78. #!/bin/sh
  79. getconfig()
  80. {
  81. SECTION=$1
  82. CONFILE=$2
  83. ENDPRINT="key\tfile\t"
  84. echo "$ENDPRINT"
  85. for loop in `echo $ENDPRINT|tr '\t' ' '`
  86. do
  87. awk -F '=' '/\['"$SECTION"'\]/{a=1}a==1&&$1~/'"$loop"'/{gsub(/[[:blank:]]*/,"",$2);printf("%s\t",$2) ;exit}' $CONFILE
  88. done
  89. }
  90. #显示的多个文件名将多行的回车符转成逗号分隔符
  91. CONFIGFILES=`ls $1|tr '\n' ','`
  92. #查看到底有多个配置文件
  93. _Num=`echo $CONFIGFILES|tr -cd \,|wc -c`
  94. #临时变量保存配置多个文件
  95. _TMPFILES=$CONFIGFILES
  96. while [ $_Num -ge 1 ]
  97. do
  98. #得到一个文件
  99. CONFIGFILE=`echo $_TMPFILES|cut -d ',' -f1`
  100. #余下的文件
  101. _TMPFILES=`echo $_TMPFILES|cut -d ',' -f2-`
  102. #配置文件数量减一
  103. _Num=$(($_Num-1))
  104. echo "========================================================"
  105. #文件名称
  106. echo "+++ConfigName:$CONFIGFILE+++++++++++++++++++++++++++++++"
  107. profile=`sed -n '/ids/'p $CONFIGFILE | awk -F= '{print $2}' | sed 's/,/ /g'`
  108. #对于一个配置文件中的所有id循环
  109. for OneCom in $profile
  110. do
  111. echo "--------------------------------------------------"
  112. echo "COM:$OneCom"
  113. getconfig $OneCom $CONFIGFILE
  114. echo "\n"
  115. echo "--------------------------------------------------"
  116. #break
  117. done
  118. echo "========================================================"
  119. done
  120. 两个小时终于写好了,请各位转载的时候不要忘记加上我的地址哦,也不枉费我辛苦一场。
  121. http://www.cublog.cn/u1/55091/showart_2125956.html

阅读(8203) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

wslkxclv2013-06-21 07:43:47

太有才了 套号学历www.thxlbl.com