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