shell中十进制转二进制脚本

使用 shell 脚本把十进制转换成二进制。

该方法支持的十进制范围内是 0 到 922 3372 0368 5477 5807(2**63-1) ,超出后结果会出错。

脚本内容:

#!/bin/bash

# 定义一个函数,作用是检测用户输入的字符串是否为整数(即仅由0~9组成的字符串)
function check_input_digit() {
    echo -ne "请输入整数(退出请输入:\e[1mbye\e[0m):\e[1m"
    read input_digit
    echo -e "\e[0m"
    while [[ ! "${input_digit}" =~ ^[[:digit:]]+$ ]]; do
        [ "${input_digit}" == "bye" ] && exit
        echo -ne "你输入的不是整数\e[1m(0~9)\e[0m, 请重新输入(退出请输入:\e[1mbye\e[0m): "
        read input_digit
        echo -e "\e[0m"
    done
}


# 定义一个函数将十进制数转换成二进制数。
function _10t2() {
    # 在函数内定义以下变量,函数外无法访问这些变量。
    local temp_shang        # 存放两数相除的商
    local temp_yu           # 存放两数相除的余数
    local input_digit       # 存放输入的数字
    local jieguo            # 存放输出结果
    # 调用 check_input_digit, 引用用户正确输入信息($input_digit)。
    check_input_digit

    while [ "$input_digit" != "bye" ]
    do
        temp_shang=${input_digit}
        while true
        do
            # "10#" 表示将其视为使用十进制的数字进行计算。
            let temp_yu=10#${temp_shang}%2
            let temp_shang=10#${temp_shang}/2
            # 将当前位置的二进制数拼接到结果中。
            jieguo=${temp_yu}${jieguo}

            # 当商为零且到该位置时,退出循环。
            [ "${temp_shang}" -le 0 ] && break 

        done
        echo -e "你输入的十进制数:\033[32;1m${input_digit} \033[0m,对应的二进制数是:\033[32m${jieguo} \033[0m。" 
        unset input_digit temp_shang temp_yu jieguo 
        echo -e "\033[1m----------------------------------------------------------------\033[0m"
        # 调用 check_input_digit, 引用用户正确输入信息($input_digit)。
        check_input_digit
    done

}


# 调用 _10t2 函数,用于十进制转换成二进制。
_10t2

这是一个用于将十进制数转换成二进制数的 shell 脚本。该脚本可以通过命令行交互方式,引导用户输入要转换的十进制数,然后输出对应的二进制数。
使用方法:

  1. 打开命令行终端(Terminal),进入 shell 脚本所在的目录

  2. 使用以下命令给予权限:

    chmod +x 脚本名.sh 
    
  3. 使用以下命令运行脚本:

    ./脚本名.sh
    
  4. 运行脚本后,按照提示输入要转换的十进制数(仅支持整数,即0~9),如果输入的不是整数,则会提示重新输入;如果输入“bye”,则程序会退出。

  5. 输入正确的十进制数后,程序会自动将其转换为二进制数,并输出结果。

  6. 如果想再次转换十进制数,请重新输入,直到输入“bye”结束程序。

注意事项:

  • 该脚本仅支持整数的转换,输入小数、负数或其他非整数字符会被视作错误输入。
  • 该脚本仅支持将十进制数转换成二进制数,无法将其他进制的数转换为二进制数。
  • 在程序输出结果中,十进制数会以绿色粗体文字标记,二进制数会以绿色文字输出。

方法二: 借助 bc 计算器

在shell中可以使用命令行工具 bc 来进行数字运算操作,同时也需要使用一些算术运算符来进行位运算操作,例如 &|^ 等。具体的脚本如下:

#!/bin/bash

# 输入需要转换的十进制数
read -p "请输入一个十进制数: " num

# 使用bc工具进行二进制转换
result=$(echo "obase=2;${num}" | bc)

echo "${num}的二进制表示为:${result}"

其中,read 命令用于读取用户输入,${num} 表示用户输入的数字;echo 命令中的 obase=2; 参数表示将结果转换为二进制,bc 工具会自动根据这个参数进行转换。最终通过 echo 命令输出转换结果。

你可以将上述脚本保存为一个 .sh 文件,然后在shell中执行这个脚本来进行十进制转二进制操作。

扩展: 其他脚本引用十进制转二进制模块
# 定义一个函数将十进制数转换成二进制数。
function _10t2() {
    # 在函数内定义以下变量,函数外无法访问这些变量。
    local temp_shang        # 存放两数相除的商
    local temp_yu           # 存放两数相除的余数
    local input_digit       # 存放输入的数字

    # 把输入内容 ${1} 赋予变量 input_digit。 
    input_digit=${1}
    # 定义一个结果的空变量,第一次循环时会使用该变量。(其实不定义这个空变量,结果也不会出错)
    _10t2_result=""

    temp_shang=${input_digit}
    while true
    do
        # "10#" 表示将其视为使用十进制的数字进行计算。
        let temp_yu=10#${temp_shang}%2
        let temp_shang=10#${temp_shang}/2
        # 将当前位置的二进制数拼接到结果中。
        _10t2_result=${temp_yu}${_10t2_result}

        # 当商为零且到该位置时,退出循环。
        [ "${temp_shang}" -le 0 ] && break 

    done

}


# 调用 _10t2 函数,用于十进制(6)转换成二进制(110)。
_10t2 6
echo "${_10t2_result}"
unset _10t2_result

如有错误,欢迎指正,谢谢!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容