[英]Test if command output contains string with “set -e”
我需要從shell腳本檢查已使用的RAM百分比。 但是我想使用“ set -e”,這使我成為一個問題。
有兩個版本的免費實用程序,其輸出略有不同。 為了在輸出上使用awk,我通過grepping輸出以僅出現在其中一個中的字符串“ buffers”來檢查哪個自由命令是哪個。 如果沒有這樣的字符串,則命令的退出狀態= 1,這會由於set -e參數而使我的腳本無法執行。
我嘗試在grep命令之后也添加“ || true”,但這總是將退出代碼設置為0,這使我的grep測試無效。
set -e
free -m | grep 'buffers' &> /dev/null || true
if [ $? == 0 ]; then
MEMORY=$(free -m | awk 'NR==3{printf "%.0f%%", $3*100/($3+$4)}')
else
MEMORY=$(free -m | awk 'NR==2{printf "%.0f%%", ($2-$7)*100/$2}')
fi
echo $MEMORY
那么如何在不關閉set -e參數的情況下正確執行此操作呢? 也歡迎提出任何更好的主意,以使已用RAM的百分比變為變量。
你能避免失敗的命令造成由於出口set -e
如果你將它插入if
:
if free -m | grep 'buffers' &> /dev/null; then
MEMORY=$(free -m | awk 'NR==3{printf "%.0f%%", $3*100/($3+$4)}')
else
MEMORY=$(free -m | awk 'NR==2{printf "%.0f%%", ($2-$7)*100/$2}')
fi
echo $MEMORY
另外, free -m
執行兩次也不太好。 您可以將其存儲在變量中以進行重復處理:
free=$(free -m)
if [[ $free =~ buffers ]]; then
MEMORY=$(awk 'NR==3{printf "%.0f%%", $3*100/($3+$4)}' <<< "$free")
else
MEMORY=$(awk 'NR==2{printf "%.0f%%", ($2-$7)*100/$2}' <<< "$free")
fi
echo $MEMORY
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.