如何使用for回圈從檔案中查找錯誤(Error1、Error2、Error 3)。
一個檔案包含strings來自4不同機器的三種型別的錯誤 ( ) 。任何機器都可能有任意數量的錯誤。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
uj5u.com熱心網友回復:
#!/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
該腳本不會顯示“未發現錯誤”訊息(沒有訊息就是好訊息),但除此之外應該可以正常作業。
uj5u.com熱心網友回復:
如果您有 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(安靜)和F用于不列印任何東西,來解釋圖案作為一個固定的字串,而不是一個正則運算式。
uj5u.com熱心網友回復:
通過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
uj5u.com熱心網友回復:
我猜目標作業系統是 Linux,因為您whiptail在腳本中使用。
下面的代碼將搜索 中的每個模式errpats,去除結果中的重復項,然后一一顯示錯誤資訊。
#!/bin/bash
errpats="\
Error1 in Machine 1
Error2 in Machine 1
Error2 in Machine 2
Error3 in Machine 3
"
grep -o -F -f <(printf '%s' "$errpats") /home/new/Report.txt |
sort -u |
while IFS='' read -r errmsg
do
echo "Found $errmsg"
whiptail --title "Report Error" --msgbox "$errmsg" 8 78
done
筆記:
grep -F將搜索文字字串而不是模式。如果這不是您想要的,請更改它。grep -o(不是 POSIX)將從其行中提取每個匹配項并將其列印在不同的行中。grep -f用于指定具有要匹配的模式的檔案。在這里,而不是一個檔案,我們使用一個行程替換(不POSIX)與內容errpats。sort -u將對結果進行排序并洗掉重復項- 該
while read回圈讀取結果一行行,做你想做的事情是什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/367453.html
