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

求助:如何在Shell脚本中比较带单位后缀的变量大小

解决Shell中带单位的大小比较问题

要实现带单位的大小变量比较,核心是先将两个变量的数值统一转换为相同单位(比如字节),再进行纯数值比较。以下是具体实现脚本:

实现步骤

  1. 编写转换函数,将带单位的大小字符串转为字节数
  2. 调用函数转换Var1和Var2
  3. 比较转换后的数值,执行对应逻辑

完整脚本示例

#!/bin/bash

# 转换函数:将带单位的大小转为字节数
convert_to_bytes() {
    local size_str="$1"
    # 提取数值和单位(支持大小写,比如KB、Mb)
    local num=$(echo "$size_str" | awk '{print $1}')
    local unit=$(echo "$size_str" | awk '{print tolower($2)}')

    # 根据单位计算字节数
    case "$unit" in
        bytes|byte)
            echo "$num"
            ;;
        kb|k)
            echo "$num * 1024" | bc
            ;;
        mb|m)
            echo "$num * 1024 * 1024" | bc
            ;;
        gb|g)
            echo "$num * 1024 * 1024 * 1024" | bc
            ;;
        *)
            echo "不支持的单位:$unit" >&2
            exit 1
            ;;
    esac
}

# 替换为你的动态获取逻辑
Var1="25 mb"
Var2="1 gb"

# 转换为字节数
var1_bytes=$(convert_to_bytes "$Var1")
var2_bytes=$(convert_to_bytes "$Var2")

# 比较大小
if [ "$(echo "$var1_bytes < $var2_bytes" | bc)" -eq 1 ]; then
    echo "Var1小于Var2,继续执行后续逻辑..."
    # 此处编写你的后续执行代码
else
    echo "Var1大于等于Var2,退出程序..."
    exit 1
fi

说明

  • 函数convert_to_bytes支持的单位:bytes/byte、kb/k、mb/m、gb/g,且不区分大小写
  • 使用bc命令处理浮点运算,支持小数数值(比如Var1=2.5 gb)
  • 遇到不支持的单位时,脚本会报错并退出
  • 用bc处理数值比较,避免Shell原生整数比较的限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:50:38