Bash脚本浮点数比较报integer expression expected,如何用awk实现判断
解决方案
Bash 原生的[]比较运算符仅支持整数运算,所以传入浮点值时会触发类型错误。你可以通过-v参数将 Bash 变量传入 awk 上下文完成浮点比较,利用 awk 的自定义退出状态码供 Bash 条件判断读取,全程保留浮点精度不需要截断小数。
两种可直接运行的修改方案
方案1:内存使用率计算和判断合并在同一条awk命令中(性能更优)
#!/bin/bash # 定义告警阈值 (%) inacceptableRAM="90" # awk判断成立时退出码为0,触发if分支,同时返回内存使用率 if RAM=$(free | grep Mem | awk -v threshold="$inacceptableRAM" '{ram_usage=$3/$2*100.0; if(ram_usage>=threshold) {print ram_usage; exit 0} else exit 1}'); then echo "Alarm RAM usage is $RAM" fi
方案2:保留单独计算内存使用率变量的原有逻辑
#!/bin/bash # 定义告警阈值 (%) inacceptableRAM="90" # 计算内存使用率 RAM=$(free | grep Mem | awk '{print $3/$2 * 100.0}') # 调用awk完成浮点比较,退出码0代表超过阈值 if awk -v ram="$RAM" -v threshold="$inacceptableRAM" 'BEGIN{if(ram>=threshold) exit 0; else exit 1}'; then echo "Alarm RAM usage is $RAM" fi
关键说明
- 不需要额外安装工具,依赖默认预装的awk即可实现
- 全程保留浮点精度,不会对小数位做截断处理
- 修复了原脚本中echo语句的引号拼写错误,删除了无意义的
@符号
内容的提问来源于stack exchange,提问作者friendly joe
相关产品推荐
相关产品推荐

