如果满足条件,但 Bash 脚本中的 运行 不满足

If condition met, yet doesn't run in Bash script

对不起,如果是一个愚蠢的问题。

我有一个脚本,即使满足条件,它的行为也不符合预期。

我的脚本是这样的:

    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" ] [[ ]] 但没有任何效果。

我想我声明的状态变量是错误的?

任何人都可以指出正确的方向吗?

非常感谢

Bash 字符串比较是 case-sensitive,而 systemctl sub-state 的输出似乎 return SubState=running 大写“S”代表“State”

我看到你在“状态”中用 lower-case 声明了你的 state -

state=$(Substate=running)
state=Substate=running
state="Substate=running"

所以我猜你的比较问题与 case-sensitive 字符串比较有关

以下似乎对我有用:

state="SubState=running"
output=$(systemctl show -p SubState someservice)

if [ "$output" == "$state" ]
then
echo "ok"
else
echo "not ok"
fi

据我了解,您是在尝试检查某个 systemctl 参数是否具有您需要的值?这可以通过简单的 grep:

来实现
$ systemctl show | grep 'LogLevel=info'  && echo ok || echo fail 
LogLevel=info
ok

$ systemctl show | grep 'LogLevel=info2' && echo ok || echo fail 
fail