3

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

4

8 回答 8

5

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
于 2012-08-21T14:11:10.257 回答
4

通常[是 的别名test

在 Linux 机器测试中

/usr/bin/test

if [ $c == 1 ]

被评估为

if test "$c" = 1

但是在android中没有test

所以如果 with [] 在任何情况下都不起作用......

我将为android交叉编译测试并检查它....!!!

于 2012-08-22T07:06:58.400 回答
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)时,我会这样做。

killall这是在 Android/system/bin/sh环境中编写的示例: http://en.androidwiki.com/wiki/Android_Shell_tips_and_tricks您还可以使用各种参数扩展来创建一些逻辑,您可以在Barnacle Wifi Tether 脚本中看到一个示例。

于 2013-04-19T16:07:44.500 回答
1

使用 bash:

#!/system/bin/bash

或者

#!/system/xbin/bash

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

ls -l /bin/sh

编辑

顺便说一句,使用:

c=1
if [ $c -eq 1 ]
then
  echo c is 1
else
  echo c is 0
fi
于 2012-08-21T14:05:09.183 回答
1

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

Windows \r\n -> CR LF

Unix \n -> LF

于 2012-12-14T20:57:17.640 回答
1

认为您使用了错误的算术运算符并且缺少“;”的语法错误:尝试

[ $c -eq 1 ];

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

#!/system/bin/sh
于 2012-08-22T04:42:53.363 回答
0

我也遇到了这个问题并找到了解决方案(在另一个站点上)

if [[ $b -gt 0]]
then
    echo 'Hooray it works'
else
    echo 'still works'
fi
于 2014-03-28T21:34:07.047 回答
0

使用 /system/bin/cmp 进行相等性测试。如果您需要进行数值测试,请将 $(($c == 1)) 替换为 $c

#!/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
于 2013-05-14T00:58:21.557 回答