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

如何在Bash中实现动态计算及字节转GB的脚本方案

在Bash中实现字节转GB的方法

嘿,我来帮你搞定Bash里字节转GB的需求,包括直接计算、可复用脚本和动态读取内容计算的方案!

一、单次快速计算

首先得明确两种常见的换算标准:

  • 二进制标准:1GB = 1024³ = 1073741824 字节(存储设备厂商常用这种)
  • 十进制标准:1GB = 10⁹ = 1000000000 字节(网络传输场景常用)

Bash本身的整数运算没法处理浮点计算,所以我们用bc工具来实现高精度转换:

二进制换算(适合存储场景)

echo "scale=6; 100571394 / 1073741824" | bc

这里scale=6表示保留6位小数,执行后会输出类似0.093667的结果。

十进制换算(适合网络场景)

echo "scale=6; 100571394 / 1000000000" | bc

执行后会输出类似0.100571的结果。

二、可复用的转换脚本

如果需要频繁转换,写个脚本会更方便,支持直接输入字节数或读取文件中的字节数:

创建名为bytes-to-gb.sh的文件,内容如下:

#!/bin/bash

# 处理输入参数
if [ $# -eq 1 ]; then
    if [ -f "$1" ]; then
        # 从文件读取第一行作为字节数
        bytes=$(head -n1 "$1")
    else
        # 直接使用传入的字节数参数
        bytes=$1
    fi
else
    echo "用法: $0 <字节数|包含字节数的文件路径>"
    exit 1
fi

# 验证输入是否为正整数
if ! [[ "$bytes" =~ ^[0-9]+$ ]]; then
    echo "错误:输入必须是正整数,或文件第一行是正整数"
    exit 1
fi

# 计算两种标准的GB值
gb_binary=$(echo "scale=6; $bytes / 1073741824" | bc)
gb_decimal=$(echo "scale=6; $bytes / 1000000000" | bc)

# 输出结果
echo "输入的字节数: $bytes"
echo "----------------------------------------"
echo "二进制标准(1GB=1024³字节): $gb_binary GB"
echo "十进制标准(1GB=10⁹字节): $gb_decimal GB"

给脚本添加执行权限:

chmod +x bytes-to-gb.sh

使用方式

  1. 直接输入字节数:
./bytes-to-gb.sh 100571394
  1. 读取文件中的字节数(假设output.txt第一行是目标字节数):
./bytes-to-gb.sh output.txt

三、动态实时计算

如果你的文件会持续输出字节数(比如程序运行中实时更新),可以用以下脚本监控文件内容并自动计算:

tail -f output.txt | while read line; do
    # 只处理纯数字行(过滤非字节数的输出内容)
    if [[ "$line" =~ ^[0-9]+$ ]]; then
        gb_binary=$(echo "scale=6; $line / 1073741824" | bc)
        gb_decimal=$(echo "scale=6; $line / 1000000000" | bc)
        echo "当前字节数: $line -> 二进制GB: $gb_binary, 十进制GB: $gb_decimal"
    fi
done

这个脚本会持续监听output.txt的新内容,每次读到纯数字行就自动转换成GB并输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:27:17