You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本除法结果为0异常及安卓应用平均CPU利用率计算问题

解决Bash脚本计算安卓应用平均CPU利用率结果为0的问题

我来帮你分析下问题所在,以及怎么修复这个脚本:

问题根源

  1. 变量名笔误:你计算平均值时写的是totalMemory / counter,但实际累加CPU值的变量是total_cpu,这个错误会导致你用未初始化的totalMemory(默认值为0)做除法,结果自然为0。
  2. 累加变量未初始化:脚本开头没有给total_cpu赋值,第一次循环时total_cpu=$((total_cpu + current_cpu))会把total_cpu当作0处理,后续计算也会基于错误的初始值。
  3. Bash不支持浮点数运算:adb shell top输出的CPU利用率通常带小数(比如2.3%),你去掉%后得到的是浮点数,但Bash的$((...))仅支持整数运算,会直接截断小数部分。如果CPU利用率小于1(比如0.7%),会被当成0处理,累加后总和始终为0,除法结果自然是0。

修复后的脚本

我们可以借助bc工具处理浮点数运算,同时修正变量问题:

#!/bin/bash
counter=1
total_cpu=0  # 初始化累加变量
while [ $counter -le 10 ]
do
    # 提取CPU利用率,保留小数部分
    current_cpu=$(adb shell top -n 1 | grep org.carleton.iot.mobile_cep | awk '{print $5}' | sed 's|%||g')
    echo "current_cpu = $current_cpu"
    # 用bc进行浮点数累加
    total_cpu=$(echo "$total_cpu + $current_cpu" | bc -l)
    echo "total_cpu = $total_cpu"
    echo "counter = $counter"
    # 用bc计算平均值,保留两位小数(可按需调整scale值)
    average_cpu=$(echo "scale=2; $total_cpu / $counter" | bc -l)
    echo "average_cpu = $average_cpu"
    echo ""
    ((counter++))
    sleep 1
done
echo done

关键改动说明

  • 初始化total_cpu=0,避免未定义变量的计算错误;
  • 用bc -l替代Bash原生整数运算,支持浮点数的累加与除法,scale=2用来指定结果保留两位小数;
  • 修正平均值计算的变量名错误,将totalMemory改为正确的total_cpu。

额外提示:如果top输出格式不同,$5可能不是CPU利用率的列,建议先单独执行adb shell top -n 1 | grep org.carleton.iot.mobile_cep确认列位置,确保awk取到正确的数值。

内容的提问来源于stack exchange,提问作者Amarjit Dhillon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:27:24