0

この正規表現を試したデバイスという単語が1行にある場合は、スクリプトをチェックインしたいと思います。

if[$SERIAL =~ /device/] しかし、実行結果は不明です。これは私のスクリプトです私は統計デバイスを提示するデバイスにのみapkをインストールしようとしているので、オフラインではありません、あなたは私のスクリプトを以下に見つけます

for SERIAL in $(adb devices | tail -n +2 | cut -sf 1);
do 
    if [$SERIAL =~ /device/]
    #if [$SERIAL = "/^.*/device\b.*$/m"]
    then
        cd $1
        for APKLIST in $(ls *.apk);
        do
            echo "Installation de  $APKLIST on $SERIAL"
            adb -s  $SERIAL install -r $1/$APKLIST &
            #adb bugreport > bug.txt
        done
    fi
done
4

3 に答える 3

0

| cut -sf 1$ SERIAL変数には、シリアル番号のみが含まれます。では、なぜそれを照合しようとしているのdeviceですか?決してなりませんtrue。使ってみませんか

for SERIAL in $(adb devices | grep device$ | cut -sf 1);

あなたの代わりにif

于 2013-03-08T18:50:06.127 に答える
0

ステートメント内の角括弧とテスト対象の間には常にスペースを入れる必要があります。また、角かっこには標準と拡張ifの 2 種類があることも理解する必要があります。[ ... ][[ ... ]]

これは、実際には1コマンド[にエイリアスされた Unix コマンドです。test

$ ls -li /bin/test /bin/[
54008404 -rwxr-xr-x  2 root  wheel  18576 Jul 25  2012 /bin/[
54008404 -rwxr-xr-x  2 root  wheel  18576 Jul 25  2012 /bin/test

testmanpageを見ると、基本的なテストを確認できます。

Kornshell (これを開始した) と BASH の両方で、二重角かっこ ( [[ ... ]]) を使用して拡張テストを実行できます。は[[ ... ]]主にパターン マッチングに使用されます。パターン マッチングは、シェルがコマンド ラインで実行できるグロビングを拡張します。一種の貧弱な正規表現です。実際、BASH の新しいバージョンでは、パターン マッチングではなく実際の正規表現を使用できます。

覚えておくべき重要なことは、パターン マッチ テスト (または BASH での正規表現テスト) を行うときは常に、文字列のみをテストできる単一の角かっこではなく、二重の角かっこを使用する必要があるということです。

また、正規表現は行のどこにでも一致する可能性があることに注意してください。

if [[ $SERIAL =~ "device" ]]

一致する可能性がありdevicesます。あなたがしたいことは\b、単語と一致していることを確認するために追加することですdevice。これ\bは正規表現の単語境界です。

if [[ $SERIAL =~ "\bdevice\b" ]]

1.はい、[は BASH および Kornshell に組み込まれたシェルであり、[実行されません/bin/[。ただし、testコマンドはシェル組み込みでもあります。

于 2013-03-08T19:51:41.263 に答える
0

if 行を次のように変更してみてください。

if [[ $SERIAL =~ "device" ]]
于 2013-03-08T12:27:46.007 に答える