如何在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
使用方式
- 直接输入字节数:
./bytes-to-gb.sh 100571394
- 读取文件中的字节数(假设
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
相关产品推荐
相关产品推荐

