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

求助:Bash FizzBuzz脚本逻辑错误排查,需用算术替换与指定运算符

Bash脚本FizzBuzz的错误分析与修正

先给你梳理脚本里的核心问题,再附上修正后的版本:

错误点整理

  • 算术运算语法错误:Bash里做取模这类算术运算必须用$((...))算术替换语法,你直接写$D % 3 == 0不会生效,不管是[ ]还是[[ ]]里,都得把算术判断放进$(( ))中。
  • 条件判断顺序错误:同时是3和5倍数的判断(输出FizzBuzz的情况)必须放在最前面,不然前面的if/elif会先匹配到3或5的单一倍数条件,这个分支永远不会被触发。
  • 语法结构混乱:第三个elif没有写then和对应的执行语句;脚本里没有循环(比如for/while),却多了一个done;最后单独的echo "FizzBuzz"会无视条件强制执行,导致结果混乱。
  • 数值判断符号错误:在[ ]里的数值相等判断要用-eq而非==,[[ ]]里虽支持==,但结合算术运算时,用$(( ... == 0 ))的写法更统一规范。

修正后的脚本

写法一(用最小公倍数简化判断)

#!/bin/bash

D=5
if [[ $((D % 15)) -eq 0 ]]; then  # 15是3和5的最小公倍数,一次判断更高效
    echo "FizzBuzz"
elif [[ $((D % 3)) -eq 0 ]]; then
    echo "Fizz"
elif [[ $((D % 5)) -eq 0 ]]; then
    echo "Buzz"
fi

写法二(严格使用&&运算符)

#!/bin/bash

D=5
if [[ $((D % 3)) -eq 0 && $((D % 5)) -eq 0 ]]; then
    echo "FizzBuzz"
elif [[ $((D % 3)) -eq 0 ]]; then
    echo "Fizz"
elif [[ $((D % 5)) -eq 0 ]]; then
    echo "Buzz"
fi

补充说明

如果需要循环处理多个数字(比如1到100),只需套上循环结构即可,示例:

#!/bin/bash
for D in {1..100}; do
    if [[ $((D % 15)) -eq 0 ]]; then
        echo "FizzBuzz"
    elif [[ $((D % 3)) -eq 0 ]]; then
        echo "Fizz"
    elif [[ $((D % 5)) -eq 0 ]]; then
        echo "Buzz"
    else
        echo $D  # 非3/5倍数时输出原数字
    fi
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:20:48