Shell递归函数笔记

##### 接口访问统计   两个变量  日期  接口名称(all  单个/多个)
##### 统计时间内、外部用户: 生成各个接口用户访问统计汇总信息
##### 递归函数 使用了两次递归 第一个为递归为了处理多个日期 , 第二个递归为了处理多个接口名称  ,两处递归互不冲突
#####          递归的目的是为了处理多个,让函数能够自循环.  避免从外部调用函数循环,减少对外部的依赖,
#####          处理前要先判断是否为多个
##### ./oma-operation.sh "2016-08-17" "/u/media/add"
##### ./oma-operation.sh "2016-08-17 2016-08-19" "/u/media/add /media/search"
function interface_stat () {
     local DATE all_num interface_name fail_num succ_num succ_rate IF_NAME all_IF_NAME
     DATE="$1"
     interface_name="$2"

if  [[ $DateType == "multi" ]] ;then  ## 如果日期为多个,则递归
        DateType="single"             ## DateType为全局变量,把多个按单个处理时要修改
        for date in ${DATE} 
            do
               interface_stat  "${date}" "${interface_name}"     ## 递归 将多日期拆成单日期处理
        done

else ##处理DateTyep不等于multi的类型

################################## 以下到函数结束前全部为处理单个日期 ############################
###------------------------------------------- 计数器 -----------------------------------------
     ##根据记数器判断标题打印次数
     counter_ifs=$[$counter_ifs+1]
     if  [[ $counter_ifs  == 1 ]] ;then
          printf "%-30s %-35s %-15s %-20s %-20s %-20s\n"  \
                  日期  接口名称  访问总数  成功访问总数  失败访问总数   访问成功率
     fi
###--------------------------------------------------------------------------------------------

          ##处理所有接口
     if   [[ $interface_name  == all ]] ;then
           
          basic_info_stat "${DATE}"  ##基础信息统计
          all_IF_NAME="`echo "${all_user_behavior}" | awk '{print $2}'| sort | uniq -c | sort -rn | awk '{print $2}'`"

          
          interface_stat "${DATE}" "${all_IF_NAME}"  #递归
     
     else ## 处理单个或多个接口

          basic_info_stat "${DATE}"  ##基础信息统计
          user_behavior_lines=`echo "${all_user_behavior}" | wc -l`  ##用户行为文件行数
          
          if   [[ $user_behavior_lines ==  0 ]] ;then
               printf "%-28s %-31s %-11s %-14s %-14s %-20s\n" "${DATE}" 0 0 0 0 0

          else

               for IF_NAME in ${interface_name}
                   do
                   all_num="`echo   "${all_user_behavior}" | grep "$IF_NAME" | wc   -l`"           ## 接口访问总次数
                   fail_num="`echo  "${all_user_behavior}" | grep "$IF_NAME" | grep -c 'failed'`"  ## 接口访问错误次数
                   succ_num=$[$all_num-$fail_num]                                                  ## 接口访问成功次数
                   succ_rate=`awk 'BEGIN{printf "%.2f%\n",'$succ_num'/'$all_num'*100}'`            ## 接口访问成功率
                   printf "%-28s %-31s %-11s %-14s %-14s %-20s\n"  \
                          "${DATE}" "${IF_NAME}" "${all_num}" "${succ_num}"  "${fail_num}" "${succ_rate}"
               done
          fi
     fi
fi

}

 

转载于:https://my.oschina.net/direnjie/blog/753098

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值