标准
#!/bin/bash # FILE_NAME=/home/roo/Desktop/shell_code/day6/my.cnf # 获取所有的片段 function get_all_segments { echo `sed -n '/[.*]/p' $FILE_NAME | sed -e 's/[//g' -e 's/]//g'` } # 统计单个片段 配置行数 function count_items_in_segment { # 找到[xxx]并且下一个 [.*] 的项中间的内容就是一段配置 items=`sed -n '/['$1']/,/[.*]/p' "$FILE_NAME" | grep -v "^$" | grep -v "^#" | grep -v "[.*]"| wc -l` echo $items # for 循环打印并计算my.cnf每一行的配置,适合配置项之间没有空格的情况 #index=0 #for item in $items; #do # index=`expr $index + 1` #done #echo $index } number=0 for segment in `get_all_segments` do number=`expr $number + 1` # 将每个片段当做参数传进来计算 items_count=`count_items_in_segment $segment` echo "$number: $segment $items_count" done
自己写的
#!/bin/bash # #定义文件变量 FILE_NAME=/tmp/my.cnf #列出各个段的函数 function get_all_segments { echo `sed -n '/[/p' $FILE_NAME | sed -e 's/[//g' -e 's/]//g'` } #查找段有多少参数的函数 function count_items_in_segment { items=`sed -n "/[$1]/,/^[/p" $FILE_NAME | grep -v "^#" | grep -v "^$" | grep -v "^[" | wc -l` echo $items } #加入计数器 number=0 #遍历段并输出参数和的循环 for segment in `get_all_segments` do number=`expr $number + 1` items_count=`count_items_in_segment $segment` echo "$number: $segment $items_count" done