实现无依赖十进制转二进制时出现expr除零错误的求助
十进制转二进制脚本除零错误排查与修复
核心问题点
- 变量名混乱:循环判断用的是
seq,但代码里计数的变量是sec——seq未初始化是空值,[[ "" -ne 9 ]]永远为真,导致循环停不下来。div从128一直除以2,最后变成0,执行expr $num / $div就触发除零报错。 - 变量赋值语法错误:shell里变量赋值不能有空格,比如
num = $d这种写法会被当成命令执行,直接导致变量值异常。 - 计数更新错误:
sec=$(sec + 1)是无效写法,shell没法直接这样计算,必须用expr或者$((...))语法。
修复方案
- 修正赋值语法:把所有带空格的赋值改成标准格式,比如:
num=$d div=128 sec=0 - 修正循环条件:把判断变量改成
sec,并且明确循环8次(对应8位二进制):while [[ $sec -lt 8 ]] - 修正计数更新:把
sec=$(sec + 1)改成:sec=$(expr $sec + 1) # 或者更简洁的shell原生写法: sec=$((sec + 1))
修复后的完整代码
# 示例:从命令行参数接收十进制数 d=$1 for i in $d do num=$d div=128 sec=0 while [[ $sec -lt 8 ]] do bin=`expr $num / $div` echo -n "$bin" rem=`expr $num % $div` div=$(expr $div / 2) num=$rem sec=$((sec + 1)) done echo # 输出后换行,避免结果连在一起 done
内容的提问来源于stack exchange,提问作者Phạm Quốc Minh Đăng
相关产品推荐
相关产品推荐

