2011-06-24 2 views
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を削除する必要がありますか?私は本当にif-elseの構文とbashのforループをすべて知っていません...このような単純な質問であればごめんなさい。私は助けに感謝します!恥ずかしがらず簡単なbashスクリプトヘルプ

編集(コメントからの更新を掲示する)

私はその中のファイルで1000個のサブディレクトリで、インデックスに俳優と呼ばれるディレクトリをしようとしています。 javaプログラムは実行されますが、1000個のディレクトリ(約180万)のすべてのファイルを処理することはできません。私はそれを一度にサブディレクトリで行うスクリプトを書こうとしています。

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

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

[は通常/usr/bin/[に、普通のコマンドであり、それはそのように扱わなければならないこと:

+0

まず、何をしようとしていますか?それが間違っていると言うことができます。 –

+0

プログラムに '〜'を使って相対パスの代わりに絶対パスを指定しようとしましたか?また、現在のスクリプトの何が間違っているかを明確にすることができますか?注 - nohupは問題なく動作します。最後に '&'を追加して、ブロックするのではなくバックグラウンドで実行することもできます。最後に、コメントにコメントを投稿するのではなく、詳細を追加して質問を更新してください。 –

+0

ああ、申し訳ありません私はちょうどそれらを別のフォルダにあり、スクリーンを乱雑にしたくないからです。私はケレックの答えを試してみると思います。 – ae0709

答えて

4

testコマンドは間違いがあります。

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

また、Kerrekが指摘しているように、比較演算子は-ltではなく、ltです。

+0

ありがとうございます。私は00 {$ i}が00iを返すことができなかったので、フォルダ名を編集しなければなりませんでした。しかし私はそれを自分で考え出しました。私はあなたの応答に感謝します。 – ae0709

1

テスト機能は、オプションの前にハイフンが必要。

+0

ありがとう、しかし、私は得る: [aengle @〜] $ ./script.sh ./script.sh:行5:[0:コマンドが見つかりません] ./script.sh:行9:[0:コマンドが見つかりません – ae0709

+0

@ aengle1429:申し訳ありませんが、スペースを忘れてしまった! –