我需要编写一个脚本来测试 Android 模拟器内的服务是否已准备好安装 apk 或不使用此命令
adb -s emulator-5554 shell pm list package | grep package:com.android.
如果命令在第一行中没有输出这些子字符串中的任何一个,那么 avd 还没有准备好安装 apk
系统在运行吗?
找不到服务
在线的
这是我的脚本
if [ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"Is the system running?"* ] ||
[ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"Can't find service"* ] ||
[ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"online"* ] ; then
echo "could not find package service"
else
echo "found package service"
fi
但我得到这个错误
./script.sh: line 4: [: =: unary operator expected
./script.sh: line 5: [: =: unary operator expected
./script.sh: line 6: [: =: unary operator expected
在您的测试中,如果命令替换
$(adb -s ...)
生成一个多字字符串,shell 会将其视为语法错误。您将不得不引用扩展:不带引号的命令替换的结果将像不带引号的变量扩展一样进行拆分和文件名通配。引用扩展可以避免这种情况。在您的情况下,这是导致问题的分裂。
随着命令替换的扩展,测试可能看起来像
这显然是一个语法错误。