3

Linuxマシンで動作するこのスクリプトがあります

#!/bin/sh
c=1
if [ $c == 1 ]
then
  echo c is 1
else
  echo c is 0
fi

しかし、私がこれをアンドロイドで次のように使用するとき:

#!/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シェルで[]に問題がある場合、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

しかし、ここアンドロイドにはありませんtest

したがって、[]を使用しても機能しない場合は...

私はアンドロイドのクロスコンパイルテストとそれをチェックします....!!!

于 2012-08-22T07:06:58.400 に答える
2

Androidは完全なUNIX環境を提供していません。これは、UNIXオペレーティングシステムではありません。WindowsにもUNIXとの類似点があるのと同じように、いくつかの類似点があります。一部のAndroidデバイスとROMは、他のデバイスよりもUNIXライクな環境を提供しようとしますが、デバイス間の互換性を検討している場合、インストールされている標準のシェルスクリプトツールのほとんどに依存することはできません。

したがって、たとえば、GNU / Linuxシステムを見ると、それがわかり、test実際[にはプログラムです。これを試してください:ls -l /usr/bin/[testほとんどのAndroidインストールには、またはが含まれていません[。つまり、Androidの最小限のシェル環境で実際のプログラミングを実行しようとする場合は、多くの奇妙なトリックを使用する必要があります。完全なUNIXシェル環境を取得するためにbusyboxをインストールすることも、アプリにbusyboxを組み込むこともできます。これは、アプリにシェルスクリプトを含める必要がある場合に行います(たとえば、Lil'DebiCommotionMeshTether)。

killallAndroidの/system/bin/sh環境での書き込みの例を次に示します。http: //en.androidwiki.com/wiki/Android_Shell_tips_and_tricksさまざまなパラメーター展開を使用してロジックを作成することもできます。その例は、BarnacleWifiTetherスクリプトで確認できます。

于 2013-04-19T16:07:44.500 に答える
1

間違った算術演算子を使用していて、「;」が欠落しているという構文エラーがあると考えてください。

[ $c -eq 1 ];

また、ファイルの先頭でBash(sh)の場所が間違っている可能性があります。

#!/system/bin/sh
于 2012-08-22T04:42:53.363 に答える
1

bashを使用する:

#!/system/bin/bash

また

#!/system/xbin/bash

shLinuxマシンでバイナリが指している場所を確認できます。

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 に答える
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 に答える
0

私もこの問題に遭遇し、解決策を見つけました(別のサイトで)

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