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

shell脚本实现最多9个命令行参数求和时-gt判断报not found错误求解

Shell脚本报错排查结果

报错直接原因

日志里出现的[19: not found类报错,根源是语法不符合shell的解析规则:

  • shell中的[是独立的测试内置命令,不是if判断的固定语法符号,要求和相邻内容必须用空格隔开。你写的判断语句if [$i -gt 10]没有在[和变量$i之间留空格,shell会把拼接后的[19([和第一个参数19连在一起)当成一个不存在的可执行命令去检索,因此触发命令找不到的报错。
  • 这种情况下因为判断逻辑完全没跑通,循环全程都没给sum加值,所以最后只会输出初始的sum值0。

可落地的修正点

  • 把测试语句的空格补全:正确的判断格式为[ "$i" -gt 10 ],即[、"$i"、-gt、10、]每段之间都用空格分隔;给参数加双引号还能避免传入带空格的参数时出现解析异常。
  • 删掉冗余逻辑:原脚本里的else continue没有实际作用——if条件不成立时本来就会自动跳过循环内的后续语句,不需要手动触发循环跳转,直接删除能简化代码。
  • 补上最多9个参数的限制:你提到脚本最多接收9个命令行参数,可以在脚本开头加参数数量校验,避免超量参数被误计入总和。

修正后的完整可运行代码

#!/bin/sh
sum=0
# 校验参数数量,最多支持9个入参
if [ $# -gt 9 ]; then
    echo "错误:最多允许传入9个命令行参数"
    exit 1
fi
# 遍历所有入参
for i in "$@"
do
    if [ "$i" -gt 10 ]; then
        sum=$((sum + i))
    fi
done
echo $sum

效果验证

用你之前的测试输入执行./Sum2.sh 19 5 3:只有19满足“大于10”的计入规则,脚本会正常输出结果19,不会再触发之前的命令找不到报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 16:36:04