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
相关产品推荐
相关产品推荐

