linux 如何使用for循环查找文件中的错误

wljmcqd8  于 2022-11-02  发布在  Linux
关注(0)|答案(3)|浏览(188)

如何使用for循环从文件中查找错误(错误1、错误2、错误3)。
一个文件包含来自4不同机器的三种类型的错误(strings)。任何机器都可以有任意数量的错误。当发现错误时,whiptail用于创建pop-up window


# !/bin/sh

if grep -R "Error1 in Machine 1" /home/new/Report.txt
then
echo "Error1 found in Machine 1"
whiptail --title "Report Error" --msgbox "Error 1 in Machine 1" 8 78
else
echo "No Error found"
fi

if grep -R "Error2 in Machine 1" /home/new/Report.txt
then
echo "Error2 found in Machine 1"
whiptail --title "Report Error" --msgbox "Error 2 in Machine 1" 8 78
else
echo "No Error found"
fi

if grep -R "Error2 in Machine 2" /home/new/Report.txt
then
echo "Error2 found in Machine 2"
whiptail --title "Report Error" --msgbox "Error 2 in Machine 2" 8 78
else
echo "No Error found"
fi

if grep -R "Error3 in Machine 3" /home/new/Report.txt
then
echo "Error3 found in Machine 3"
whiptail --title "Report Error" --msgbox "Error 3 in Machine 3" 8 78
else
echo "No Error found"
fi
pinkon5k

pinkon5k1#


# !/bin/bash

grep 'Error[1-3] in Machine [1-4]' /home/new/Report.txt |
while IFS= read -r errmsg
do
        whiptail --title "Report Error" --msgbox "$errmsg" 8 78
done

该脚本不会显示“No error found”消息(没有消息就是好消息),但在其他方面应该可以工作。

imzjd6km

imzjd6km2#

如果您有3个错误和4台机器,则可以使用嵌套循环来处理所有12种组合:

for ((e = 1; e <= 3; e++)); do
  for ((m = 1; m <= 4; m++)); do
    message="Error$e in Machine $m"
    if grep -qF "$message" /home/new/Report.txt; then
      echo "$message"
      whiptail --title "Report Error" --msgbox "$message" 8 78
    else
      echo "No Error found"
    fi
  done
done

grep选项q(quiet)和F用于不打印任何内容,并将模式解释为固定字符串,而不是正则表达式。

bweufnob

bweufnob3#

传递grep(1)一次并保存输出,然后执行其余操作。


# !/usr/bin/env bash

mapfile -t error_message < <(grep 'Error[[:digit:]] in Machine [[:digit:]]' /home/new/Report.txt)

((${#error_message[*]})) || { printf >&2 'No error message found\n'; exit; }

for message in "${error_message[@]}"; do
  printf '%s\n' "$message"
  whiptail --title "Report Error" --msgbox "$message" 8 78
done

相关问题