一個襯墊看看 grep 是否返回了一些東西?

一個襯墊看看 grep 是否返回了一些東西?

我正在嘗試檢查機器是否是 ThinkPad 或不使用類似這樣的東西:

sudo dmidecode | grep ThinkPad

我希望最終結果會傳回 true 或 false(或 1/0)。

我想解決方案可能是這樣的:

sudo dmidecode | grep -c ThinkPad | test xargs -gt 0

但我不確定xargs這裡如何正確使用。

答案1

只需在 後面新增退出狀態檢查grep,預設它將始終從管道的最後一個命令獲取退出狀態:

sudo dmidecode | grep -q ThinkPad; echo $?

用於-q抑制任何輸出,grep因為我們只對退出狀態感興趣。


如果您願意,可以使用命令分組,但這裡有些多餘:

sudo dmidecode | { grep -q ThinkPad; echo $? ;}

答案2

如果您打算使用具有if檢查功能的 shell 腳本,只需按照 heemayl 的建議使用即可-q

if sudo dmidecode | grep -q Thinkpad
then
    echo "I'm a Thinkpad"
fi

由於該if區塊檢查命令的退出狀態,因此我們可以grep直接依賴 的退出狀態,而不是列印$?並將其與其他內容進行比較。

答案3

靈感來自希梅爾的回答

sudo dmidecode | grep -q ThinkPad && echo true || echo false

如果 grep 找到 ThinkPad,則傳回 true,否則傳回 false。

答案4

sudo dmidecode | grep -c ThinkPad | xargs test 0 -lt

您需要重新排列xargsandtest命令及其操作數才能獲得您想要的結果。如果存在非零 (>0) ThinkPad 線路,則這將傳回 true 狀態。

或者,如果您想保留測試命令的操作數順序,您可以這樣做

sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0

然後,在這兩個命令中,檢查$?變數的值以確定 grep 成功/失敗的命運,如下所示:

if sudo dmidecode | grep -c ThinkPad | xargs -I \{\} test \{\} -gt 0; then
   echo "success hooray!"
else 
   echo nothing
fi

相關內容