Sorry if a silly question.
I have a script that doesn’t behave how it’s intended even though a condition is met.
My script is something like this:
JavaScript
x
state=$(Substate=running)
systemctl show -p SubState someservice | while read output
if [ $output = $state ];
then
echo "ok"
else
echo "not ok"
fi
I’ve tried declaring the state variable in different ways but non seem to work;
JavaScript
state=$(Substate=running)
state=Substate=running
state="Substate=running"
also tried [ $output = $state ] [ "$output" = "$state" ] [[ ]]
but nothing works.
I think I’m declaring the state variable wrong?
Can anybody point me in the right direction?
Many thanks in advance
Advertisement
Answer
Bash strings compare is case-sensitive, and the output from systemctl sub-state seems to return SubState=running
with capital “S” for “State”
And I see you declared your state
with lower-case s in “state” –
JavaScript
state=$(Substate=running)
state=Substate=running
state="Substate=running"
So my guess is that your comparing problem relates to case-sensitive string comparison
The following seems to be working for me:
JavaScript
state="SubState=running"
output=$(systemctl show -p SubState someservice)
if [ "$output" == "$state" ]
then
echo "ok"
else
echo "not ok"
fi