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

如何编写Bash脚本计算命令行传入整数的平均值(保留两位小数)

嘿,我来帮你搞定这个Bash脚本的问题!虽然你还没贴出你写的错误代码,但我先给你一个符合要求的正确实现,再唠唠大家写这个脚本时最容易踩的坑,你可以对照着排查自己的问题~

正确的Bash脚本实现

下面是满足你需求的脚本,包含循环、变量使用,还做了参数合法性校验和边界处理:

#!/bin/bash

# 初始化总和与计数变量,必须先设为0,否则会报错
total=0
count=0

# 循环遍历所有命令行传入的参数
for num in "$@"; do
    # 简单校验参数是否为整数(支持正负)
    if ! [[ "$num" =~ ^-?[0-9]+$ ]]; then
        echo "错误:'$num' 不是有效的整数,请检查参数!"
        exit 1
    fi
    # 累加总和,计数加1
    total=$((total + num))
    count=$((count + 1))
done

# 处理没有传入任何参数的情况
if [ $count -eq 0 ]; then
    echo "错误:请至少传入一个整数参数!"
    exit 1
fi

# 用bc工具处理浮点除法,保留两位小数
average=$(echo "scale=2; $total / $count" | bc)

# 确保输出格式严格保留两位小数(比如整数25会显示为25.00)
printf "%.2f\n" "$average"

测试一下你给的例子:

# 执行脚本
./avg.sh -50 0 50 100
# 输出:25.00
常见错误排查点

你可以对照自己的脚本,看看是不是踩了这些坑:

  • 变量未初始化:如果total或count没提前设为0,Bash会把它们当成空值,执行$((total + num))时直接报错。
  • 整数除法陷阱:Bash默认只支持整数运算,如果直接写$((total / count)),哪怕结果是小数也会被截断(比如101/4会得到25而不是25.25),必须用bc或awk这类工具处理浮点计算。
  • 参数遍历错误:如果用for num in $*而不是"$@",当参数包含特殊字符时会出问题(虽然整数参数一般不会,但"$@"是遍历所有参数的标准写法,能保证每个参数被正确识别)。
  • 缺少参数校验:如果传入非整数(比如字符串、小数),脚本会直接崩溃,加个正则校验能避免这种情况。
  • 输出格式不达标:如果只用echo $average输出,当结果是整数时只会显示25而不是25.00,必须用printf "%.2f"来强制格式化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:55:45