對不起,如果一個愚蠢的問題。
我有一個腳本,即使滿足條件,它的行為也不符合預期。
我的腳本是這樣的:
state=$(Substate=running)
systemctl show -p SubState someservice | while read output
if [ $output = $state ];
then
echo "ok"
else
echo "not ok"
fi
我嘗試以不同的方式宣告狀態變數,但似乎不起作用;
state=$(Substate=running)
state=Substate=running
state="Substate=running"
也嘗試過[ $output = $state ] [ "$output" = "$state" ] [[ ]],但沒有任何效果。
我想我宣告狀態變數錯誤?
誰能指出我正確的方向?
提前謝謝了
uj5u.com熱心網友回復:
Bash 字串比較區分大小寫,systemctl 子狀態的輸出似乎回傳SubState=running大寫的“S”表示“狀態”
我看到你state在“狀態”中用小寫的 s 宣告了你的 -
state=$(Substate=running)
state=Substate=running
state="Substate=running"
所以我的猜測是您的比較問題與區分大小寫的字串比較有關
以下似乎對我有用:
state="SubState=running"
output=$(systemctl show -p SubState someservice)
if [ "$output" == "$state" ]
then
echo "ok"
else
echo "not ok"
fi
uj5u.com熱心網友回復:
據我了解,您正在嘗試檢查某些 systemctl 引數是否具有您需要的值?這可以通過簡單的 grep 來實作:
$ systemctl show | grep 'LogLevel=info' && echo ok || echo fail
LogLevel=info
ok
$ systemctl show | grep 'LogLevel=info2' && echo ok || echo fail
fail
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/451826.html
下一篇:在檔案中查找串列中只有單詞的行
