android中的shell脚本给出了[:not found

我有这个脚本在我的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?

Androidshell有问题,如果是的话有没有其他办法来检查c的值?

Solutions Collecting From Web of "android中的shell脚本给出了[:not found"

andriod shell sh实际上是一个到busybox的链接,它被调用为

 busybox sh 

你需要手动设置[小程序

 busybox ln -s /your_original_sh_path/busybox [ 

如果您不知道busybox放在哪里,请尝试列出您提供的/ system / bin / sh

 ls /system/bin/sh busybox which busybox 

一般[test的别名,

在Linux机器测试中

 /usr/bin/test 

 if [ $c == 1 ] 

被评估为

 if test "$c" = 1 

但在这里在Android没有test

所以如果与[]不会在任何情况下工作…

我将交叉编译测试为Android和检查…. !!!

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的/system/bin/sh环境下编写killall的例子: http : //en.androidwiki.com/wiki/Android_Shell_tips_and_tricks你也可以使用各种参数扩展来创建一些逻辑,你可以看到一个例子在Barnacle Wifi Tether脚本中 。

使用bash:

#!/system/bin/bash

要么

#!/system/xbin/bash

您可以在您的Linux机器上检查sh二进制文件所指向的位置:

 ls -l /bin/sh 

编辑

顺便说一下,使用:

 c=1 if [ $c -eq 1 ] then echo c is 1 else echo c is 0 fi 

认为你使用错误的算术运算符,并有一个缺少“;”的语法错误:尝试

 [ $c -eq 1 ]; 

您的Bash(sh)的位置也可能是错误的在您的文件的顶部:

 #!/system/bin/sh 

如何检查.sh文件在换行之前不包含回车符。

Windows \ r \ n – > CR LF

Unix \ n – > LF

使用/ 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 

我碰到这个问题也发现了一个解决方案(在另一个网站上)

 if [[ $b -gt 0]] then echo 'Hooray it works' else echo 'still works' fi