Linux
Bash Script Case 語句(if-not 邏輯)
我寫了一個小 bash 腳本。它將嘗試找到單詞ERROR。如果找到結果值將是非零數值(例如 25。我在腳本中提到但它是可變數值),如果未找到,它將是 0。
我的問題是:我想使用
case
語句,如果輸出不為零,則執行以下命令truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit &
腳本在這裡:
#! /bin/bash case "$(grep ERROR /root/test/wayfile.log | wc -w)" in 25) echo "empty log file and kill screen: $(date)" >> /var/log/finderror.txt truncate -s 0 /root/test/wayfile.log && screen -X -S wowow quit & ;; 0) # all ok ;; esac
一種選擇:告訴
case
尋找 a0
,在這種情況下:什麼都不做;否則,執行你的命令:case X in (0) : ## do nothing ;; (*) truncate ... ;; esac
另一種選擇:告訴
case
尋找任何非零數字:case X in ([123456789]) truncate ... esac
…但我不會嘗試將數字與 匹配
case
,而是使用test
:if [ "$(grep -c ERROR /root/test/wayfile.log)" -gt 0 ] then truncate ... fi
我已經簡化
grep ... | wc -w
為 justgrep -c
,它要求grep
進行計數而不是涉及wc
。此外,由於您真的只是對文件中是否存在該單詞感興趣
ERROR
,因此您可以詢問grep
它是否存在:if grep -F -q ERROR /root/test/wayfile.log then truncate ... fi
該
-F
標誌告訴 grep 我們的搜尋文本是純(“固定”)文本——沒有正則表達式;該-q
標誌告訴 grep 是“安靜的”——不計算或輸出匹配的行,只需根據它是否找到搜尋文本(或沒有)設置其退出狀態。成功的退出程式碼(0)表示在文件中至少找到一次搜尋文本;failure 表示在文件中根本找不到搜尋文本。