I'm trying to execute the following shell script, where I'm trying to keep executing a command in an infinite loop and until the output is not equal to a certain substring
checkDeviceStatus=$(adb shell getprop sys.boot_completed 2>&1)
function Check_Status () {
while [ ! "$checkDeviceStatus" =~ "device offline" ] || [ ! "$checkDeviceStatus" =~ "device still authorizing" ]
do
if [ ! "$checkDeviceStatus" =~ "device offline" ] || [ ! "$checkDeviceStatus" =~ "device still authorizing" ];
then
echo "Device is now up and running!!: '$checkDeviceStatus'"
break
else
echo "'$checkDeviceStatus'"
fi;
done
};
Check_Status
but I'm getting the following error
./shell.sh: line 6: [: =~: binary operator expected
./shell.sh: line 8: [: =~: binary operator expected
shellcheck.net
is your friend. In this case, =~ is only recognised within[[ ... ]]
brackets. – Paul_Pedant Jul 19 '21 at 14:48[
and[[
are not the same thing, see e.g. Why is[
a shell builtin and[[
a shell keyword? and [What is the difference between the Bash operators [[ vs vs ( vs ((? and http://mywiki.wooledge.org/BashGuide/TestsAndConditionals – ilkkachu Jul 19 '21 at 14:51checkDeviceStatus=$(adb shell getprop sys.boot_completed 2>&1)
runs the command and saves the output just once, it doesn't update every time you access the variable. So having the same condition in theif
as in the surroundingwhile
is a bit redundant, and also the loop condition will never change. You need to do the command substitution and assignment inside the loop to update it – ilkkachu Jul 19 '21 at 14:54