我想简单地测试一个Android设备是否来自计算机(对于root / backup / flash脚本)。 所以我必须测试su二进制文件的一些位置。这是我的代码:
#!/bin/sh
#####################
## ROOT CHECK
SU_LOCATIONS="/system/bin/su /system/xbin/su"
check() {
echo "Checking for SU binary…"
for file in $SU_LOCATIONS
do
suFileResult=`$ADB shell "ls $file"`
echo "suFileResult = $suFileResult"
echo "file = $file"
if [ "$suFileResult" == "$file" ];
then echo "Su trouvé à $suFileResult"
fi
done
echo "$suFileResult" > tmpbak/suFil
}
问题是即使file == suFileResult,“if”也返回false。如果我删除==周围的空格,“if”将始终返回TRUE ...
我做错了什么?如果你提供另一种方法来测试文件(以及在哪里),那将是完美的。
感谢您的回答!
PS:字符串可以包含空格,例如:
/system/bin/su: No such file or directory
编辑回答:
顺便说一下,我想了解如何删除这个讨厌的\ r字符:添加
| tr -d '\r'
将删除所有字符串中的此字符(不仅在结尾处)。所以在我的情况下:
suFileResult=$(adb shell "[[ -e $file ]]; echo \$?;" | tr -d '\r')
答案 0 :(得分:-1)
由于一些奇怪的原因adb
返回带有DOS行尾(\r\n
)的字符串。
$ suFileResult="$(adb shell "ls $file")"
$ set | grep suFileResult
suFileResult=$'/system/bin/su\r'
所以正确的condidtion语句可能如下所示:
[[ $suFileResult == ${file}$'\r' ]]
另外,我应该注意,使用ls
检查文件存在是一种非常奇怪的方法,即使adb
没有返回错误代码,也可以将其打印到STDOUT:
suFileResult=$(adb shell "[[ -e $file ]]; echo \$?")
if [[ $suFileResult == $'0\r' ]]; then
echo "Su trouvé à $file"
fi