shell 在while循环中运行时出现奇怪的“expr:Division by Zero”输出

7d7tgy0s  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(251)

我目前正在开发一个函数,它可以将十进制转换为二进制,而无需使用awk sed printf xxd od perl ibase,obase,bc。然而,该函数成功地将十进制转换为二进制,但由于某种原因,它在转换后的二进制末尾输出“expr:Division by Zero”
我曾试图删除expr和设置为一个正常的公式,但它分发了另一个错误,所以我没有选择坚持这一点,因为它是壁橱的事情,转换十进制到二进制

for i in $d do #$d is the decimal
num = $d #decimal number
div = 128 #it is the power number (we should start dividing by 128)
sec = 0 #to run the loop 8 times 
while [[ $seq -ne 9 ]] 
do 
    bin=`expr $num / $div`
    echo -n "$bin" # we can add the replacing x and space here 
    rem=`expr $num % $div` # gets the remainder
    div=$(expr $div / 2) #to get the decreasing power of 2 
    num=$rem #next the num should be equal to the remainder 
    sec=$(sec + 1) 
done
done 

#OUTPUT
Output :  11111000expr:division by zero

任何提示都将不胜感激

tkqqtvp1

tkqqtvp11#

这里有很多错误,从简单的语法开始。如果你想使用纯bash将十进制表示转换为二进制表示,你可以使用下面的脚本:

#!/bin/bash

dec=123456 # for example
bin=
n=$dec
while ((n)); do
    bin=$((n & 1))$bin
    ((n >>= 1))
done

echo "$dec(decimal) = ${bin:-0}(binary)"

这应该适用于所有可以用63位表示的非负整数(除非您的bash版本非常旧)。

相关问题