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

使用grep提取日志数值后执行bash算术运算出现expr报错如何解决

问题原因
  • 变量赋值语法错误:Bash 变量赋值时等号两侧不允许有空格,NU = expr这类写法会被系统识别为尝试执行名为NU的命令,而非给变量赋值
  • 命令返回值未正确捕获:要将命令输出赋值给变量,需要用$()将整段命令包裹
  • 提取的数值携带多余空格:之前的awk语句中print $3" "额外输出了空格,变量内的空白字符会引发计算逻辑报错
  • 运算工具混用逻辑错误:expr仅支持整数运算,你需要的百分比计算涉及浮点数除法,统一使用bc处理更合适
修复后的完整代码
#!/bin/bash
# 数值提取部分,去掉awk多余的空格输出
DS=$(grep DS $1 | awk '{print $3}')
echo "DS=$DS"
DI=$(grep DI $1 | awk '{print $3}')
echo "DI=$DI"
UU=$(grep UU $1 | awk '{print $3}')
echo "UU=$UU"
TI=$(grep TI $1 | awk '{print $3}')
echo "TI=$TI"
BL=$(grep BL $1 | awk '{print $3}')
echo "BL=$BL"
RE=$(grep RE $1 | awk '{print $3}')
echo "RE=$RE"
PU=$(grep PU $1 | awk '{print $3}')
echo "PU=$PU"
PT=$(grep PT $1 | awk '{print $3}')
echo "PT=$PT"
FU=$(grep FU $1 | awk '{print $3}')
echo "FU=$FU"

# 计算部分,整数运算用bash算术扩展,浮点运算用bc
NU=$((DS + DI + PT + PU))
echo "NU=$NU"
DE=$((FU - UU - TI - BL - RE))
echo "DE=$DE"
# scale=2表示保留2位小数,可根据需要调整数值
Result=$(echo "scale=2; $NU / $DE * 100" | bc -l)
echo "Result=$Result%"
运行效果

执行bash Script.sh Case1.log后输出如下:

DS=1625
DI=393
UU=210
TI=52
BL=4
RE=9
PU=123
PT=420
FU=3186
NU=2561
DE=2911
Result=87.97%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:54:03