Bash 如果基於 grep 結果給出「參數太多」錯誤?

Bash 如果基於 grep 結果給出「參數太多」錯誤?

所以我試著判斷機器是否有電池,然後根據是否有電池執行不同的命令。這是我到目前為止所擁有的:

upower -d >> /tmp/batstat
if [ grep -F BAT0 /tmp/batstat ]; then
    echo "BAT0 PRESENT" >> /tmp/batstat
else
    echo "NO BAT0" >> /tmp/batstat
fi

但是,當如預期將 NO BAT0 寫入 /tmp/batstat 時,這會傳回錯誤「bash: [: 參數太多」。僅運行 grep 可以正常工作,所以我不明白為什麼它不能作為 if 條件工作。

如果有更好的方法來檢查電池,我百分之百願意接受。

答案1

if upower -d | grep -qF BAT0 ; then
   echo "BAT0 PRESENT"
else
   echo "NO BAT0"
fi

if將執行一系列指令並處理最後一個指令的狀態,在本例中為 grep。grep如果匹配則傳回 true,否則傳回 false。

答案2

grep -F BAT0 /tmp/batstat絕非test的內建條件表達式(如精美手冊中詳述) bash。由於 的輸出grep未使用,因此-q選項和依賴退出程式碼可能就足夠了。

grep -F -q BAT0 batstat
if [[ $? -eq 0 ]]; then
    echo yea
else
    echo nay
fi

此外,/tmp/batstat這可能是一個非常糟糕的選擇,尤其是在邪惡的本地用戶可以訪問的情況下。考慮改為使用mktemp(1),或未在 下找到該文件/tmp

相關內容