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

如何使用for循环从文件中查找Error1、Error2、Error3三类错误

优化后for循环实现脚本

以下脚本完全兼容POSIX标准,适配你原有的#!/bin/sh解释器:

#!/bin/sh
REPORT_PATH="/home/new/Report.txt"
# 遍历所有错误类型
for err_type in Error1 Error2 Error3; do
    # 遍历所有4台机器
    for mach_id in 1 2 3 4; do
        match_str="${err_type} in Machine ${mach_id}"
        # grep加-q参数静默执行,仅返回匹配状态,不输出内容
        if grep -q -R "${match_str}" "${REPORT_PATH}"; then
            echo "${err_type} found in Machine ${mach_id}"
            whiptail --title "Report Error" --msgbox "${err_type//Error/Error } in Machine ${mach_id}" 8 78
        else
            # 不需要无错误提示可以注释掉下行,避免输出过多冗余信息
            echo "No Error found"
        fi
    done
done

逻辑说明

  • 双层for循环自动组合所有错误类型+机器的匹配场景,无需重复编写if判断语句,后续要新增错误类型或机器只需修改循环的遍历列表即可
  • grep -q参数实现静默检测,不会把匹配到的文件内容直接打印到终端,仅通过返回值判断是否匹配成功
  • 弹窗内容的${err_type//Error/Error }是为了把Error1自动转为Error 1,匹配你原有弹窗的显示格式,如果你不需要空格可以直接用${err_type}替换。

如果你的场景只需要检测原脚本中列出来的4种特定组合,不需要全量遍历所有错误和机器,也可以直接把要检测的组合写到单循环里:

#!/bin/sh
REPORT_PATH="/home/new/Report.txt"
# 直接列出所有需要检测的错误组合
for match_rule in "Error1 in Machine 1" "Error2 in Machine 1" "Error2 in Machine 2" "Error3 in Machine 3"; do
    if grep -q -R "${match_rule}" "${REPORT_PATH}"; then
        echo "${match_rule} found"
        # 替换出弹窗需要的空格格式
        msg_str=$(echo "${match_rule}" | sed 's/Error\([0-9]\)/Error \1/')
        whiptail --title "Report Error" --msgbox "${msg_str}" 8 78
    else
        echo "No Error found"
    fi
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:36:02