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

时间:2012-08-21 14:03:21

标签: android linux shell sh

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

8 个答案:

答案 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的别名,

Linux机器测试中的

位于

/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' DebiCommotion 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