如果满足条件,但 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
对不起,如果是一个愚蠢的问题。
我有一个脚本,即使满足条件,它的行为也不符合预期。
我的脚本是这样的:
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