我有这个脚本可以在我的linux机器上运行
#!/bin/sh
c=1
if [ $c == 1 ]
then
echo c is 1
else
echo c is 0
fi
但是当我在android中使用它时如下:
#!/system/bin/sh
c=1
if [ $c == 1 ]
then
echo c is 1
else
echo c is 0
fi
它会出现如下错误:
[: not found
修改
是否还有其他逻辑可以检查$c
的值,无论是1还是0?
Android shell在[]中有问题,如果有,还有其他方法可以检查c的值吗?
答案 0 :(得分:5)
andriod shell sh实际上是一个指向busybox的链接,它被调用为
busybox sh
您需要手动设置[applet
busybox ln -s /your_original_sh_path/busybox [
如果您不知道busybox的位置,请尝试列出您提供的/ system / bin / sh
ls /system/bin/sh
busybox which busybox
答案 1 :(得分:4)
通常[
是test
的别名,
位于
/usr/bin/test
和
if [ $c == 1 ]
评估为
if test "$c" = 1
但是在android中没有test
所以如果[]在任何情况下都不起作用......
我将交叉编译测试android并检查它.... !!!
答案 2 :(得分:2)
Android不提供完整的UNIX环境,它不是UNIX操作系统。它有一些相似之处,就像Windows与UNIX有一些相似之处。有些Android设备和ROM尝试提供更多类似UNIX的环境,但如果您考虑跨设备兼容性,则不能依赖大多数正在安装的标准shell脚本工具。
例如,如果你看一下你的GNU / Linux系统,你会发现test
和[
实际上是程序。试试这个:ls -l /usr/bin/[
。大多数Android安装都不包含test
或[
。这意味着如果你想尝试使用Android的最小shell环境进行实际编程,你必须使用许多奇怪的技巧。您可以安装busybox以获得完整的UNIX shell环境,或者甚至可以将busybox构建到您的应用程序中。当我需要在应用程序中包含shell脚本时(例如,Lil' Debi和Commotion MeshTether),我会这样做。
以下是在Android的killall
环境中编写/system/bin/sh
的示例:http://en.androidwiki.com/wiki/Android_Shell_tips_and_tricks您还可以使用各种parameter expansions创建一些逻辑,您可以看到一个示例在Barnacle Wifi Tether scripts。
答案 3 :(得分:1)
使用bash:
#!/system/bin/bash
或
#!/system/xbin/bash
您可以在Linux计算机上查看sh
二进制文件指向的位置:
ls -l /bin/sh
修改强>
BTW,使用:
c=1
if [ $c -eq 1 ]
then
echo c is 1
else
echo c is 0
fi
答案 4 :(得分:1)
认为您使用了错误的算术运算符,并且存在缺少“;”的语法错误:尝试
[ $c -eq 1 ];
此外,您在文件顶部的Bash(sh)位置可能有误:
#!/system/bin/sh
答案 5 :(得分:1)
如何在换行前检查.sh文件是否包含回车符。
Windows \ r \ n - > CR LF
Unix \ n - > LF
答案 6 :(得分:0)
使用/ system / bin / cmp进行相等测试。 如果你需要数字测试,用$ c替换$(($ c == 1))
#!/system/bin/sh
echo $c >/tmp/a
echo 1 >/tmp/b
if cmp /tmp/a /tmp/b
echo c is 1
else
echo c is 0
fi
答案 7 :(得分:0)
我也遇到了这个问题并找到了解决方案(在另一个网站上)
if [[ $b -gt 0]]
then
echo 'Hooray it works'
else
echo 'still works'
fi