1
#!/bin/sh

for i in {0..999}
do
    if [$i lt  10]
    then
            nohup java BeginIndex ~actors/00{$i} ~/index_new/ > ~/results/actors_results/00{$i}.txt
            echo "INDEXING ($i)th directory completed "
    elif [$i lt 100]; then
            nohup java BeginIndex ~/actors/0{$i} ~/index_new/ > ~/results/actors_results/0{$i}.txt
            echo "INDEXING ($i)th directory completed "

    else
            nohup java BeginIndex ~/actors/{$i} ~/index_new/ > ~/results/actors_results/{$i}.txt
            echo "INDEXING ($i)th directory completed "
    fi
done

このスクリプトの何が問題なのか誰か教えてもらえますか? 最初に #!/bin/bash を実行する必要がありますか? また、このスクリプトを記述どおりに nohup できますか、それとも if-else ステートメントの nohup を削除する必要がありますか? bash の if-else と for ループのすべての構文を本当に知っているわけではありません...これが非常に単純な質問である場合は申し訳ありません。助けてくれてありがとう!

編集 (コメントからの更新の投稿)

1000 個のサブディレクトリがあり、その中にファイルが含まれている、actor というディレクトリのインデックスを作成しようとしています。Java プログラムは実行されますが、これらの 1000 個のディレクトリ (約 180 万個) 内のすべてのファイルを処理することはできません。一度にサブディレクトリを実行するスクリプトを書きたいと思います。

これを行うためにサーバーに ssh していますが、しばらく時間がかかるので、ドロップしないようにします。ヒープメモリが不足しているため、ディレクトリ全体でJavaプログラムを実行することはできません。これは最も効率的な Java コードではありませんが、このスクリプトが一度にサブディレクトリを実行している間に、その問題に対する別の解決策に取り組んでいます。

4

2 に答える 2

4

テストコマンドは間違いなく間違っています。

"["bash は構文ではなくコマンドであることを覚えておいてください。"]"最後の引数として文字列が必要です。このため、前後にスペースが必要です。(セミコロンは文法の一部なのでOK)

また、Kerrek が指摘したように、比較演算子は ではあり-ltませんlt

于 2011-06-24T17:02:09.387 に答える
1

テスト関数では、オプションの前にハイフンが必要です:

if [ $i -lt 10 ] ; then
    # ....
fi

[は通常のコマンドであり、通常は/usr/bin/[であり、そのように扱う必要があることに注意してください。

于 2011-06-24T16:49:20.180 に答える