腳本發現錯誤,但它總是進入其他條件“未找到錯誤”。我錯過了如何比較兩個變數嗎?
ERROR="Error:"
for i in `find /logs -mtime -1`
do
CHECK=`cat $i |grep -i "Error"|cut -f 1 -d " "`
if [ "$CHECK" == $ERROR ]
then
echo "Found Error"
else
echo "Not Found Error"
fi
done
uj5u.com熱心網友回復:
你試過類似的東西if [[ "$CHECK" == $ERROR ]]嗎?
要簡單地檢測錯誤而不列印錯誤訊息,您可以使用
CHECK=$(cat $i | grep "Error" | wc -l)
if [[ $CHECK -ne 0 ]]
then
echo "Found error"
else
echo "Not found error"
fi
uj5u.com熱心網友回復:
您正在使用grep -i不區分大小寫的匹配,但隨后測驗結果是否與 string 完全相等Error:。如果不區分大小寫的匹配很重要,則完全相等測驗不是適當的補充。
您還捕獲了一個潛在的多行輸出并將其與一個字串進行比較,該字串只能是單行輸出的結果。
并且您在該行的任何位置匹配“錯誤:”,但假設它會出現在開頭。
總的來說,您正在以一種非常復雜的方式進行此操作,因為grep它會通過其退出狀態告訴您是否找到任何匹配項。例如:
#!/bin/bash
for log in `find /logs -mtime -1`; do
if grep -i -q '^Error:' "$log"; then
echo "Found Error"
else
echo "Not Found Error"
fi
done
uj5u.com熱心網友回復:
有兩件事我會建議并可能會解決您的問題:
在第一行添加
#!/bin/bash,以確保它被解釋為 bash 而不是 sh。很多時候我都因為這個而在比較方面遇到了麻煩比較兩個變數時,使用雙括號 (
[[和]]) 此外,如果是字串,請始終"$ERROR"在其周圍加上引號。$ERROR變數缺少它。
還請查看其他答案,有很多方法可以以更簡單的方式做同樣的事情。
注意:比較數字時,您應該使用 -eq
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/414658.html
標籤:
