Bash检测jmeter测试结果含Err:0始终匹配失败如何解决?
问题原因及解决方案
代码存在的3个核心问题
- 运算符两侧缺少空格:Bash 的
[[ ]]判断语法中,==匹配运算符左右必须加空格,否则$results== *"Err: 0"*会被识别为单个非空字符串,判断逻辑完全不符合预期。 - 未捕获标准错误流:JMeter运行时的日志输出默认打印到标准错误流(stderr),
$()默认仅捕获标准输出(stdout),导致results变量中根本没有你要匹配的日志内容。 - Windows路径转义问题:Bash环境中反斜杠是转义字符,直接写Windows路径的反斜杠会导致路径识别错误,JMeter可能根本没有正常启动。
修正后的代码
第一步:修改变量赋值逻辑,补全捕获规则和路径格式
# 路径反斜杠替换为正斜杠,添加2>&1将标准错误合并到标准输出捕获 results=$("C:/Users/jbding/Documents/Programs/apache-jmeter-5.4.1/apache-jmeter-5.4.1/bin/jmeter.bat" -n -t "C:/Users/jbding/Documents/Projects/tests.jmx" 2>&1)
第二步:修正条件判断的空格
if [[ $results == *"Err: 0"* ]]; then echo "It's there!" else echo "Its not there" fi
可选简化写法(无需存储变量)
直接通过grep判断输出是否包含目标字符串,性能更高:
"C:/Users/jbding/Documents/Programs/apache-jmeter-5.4.1/apache-jmeter-5.4.1/bin/jmeter.bat" -n -t "C:/Users/jbding/Documents/Projects/tests.jmx" 2>&1 | grep -q "Err: 0" if [ $? -eq 0 ]; then echo "It's there!" else echo "Its not there" fi
内容的提问来源于stack exchange,提问作者tmp dev
相关产品推荐
相关产品推荐

