2011-06-24 41 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嗎?另外,我可以按照它的寫法來禁用這個腳本嗎?或者我是否必須刪除if-else語句中的nohup?我真的不知道if-else和for bash的所有語法......對不起,如果這是一個簡單的問題。我感謝幫助!尷尬簡單的bash腳本幫助

編輯(從發佈評論的更新)

我試圖索引叫演員的目錄,1000個子目錄裏面他們的文件。 java程序將運行,但它不能處理這1000個目錄中的所有文件(大約180萬)。我想寫一個腳本,一次執行它的子目錄。

我ssh'ing到服務器做到這一點,但它會需要一段時間,所以我希望它不會下降。我不能只在整個目錄上運行java程序,因爲它沒有堆內存。這不是最有效的java代碼,但是我正在研究解決這個問題的另一個解決方案,而這個腳本一次運行子目錄。

+0

首先,你想做什麼?只有這樣我們才能說它有什麼問題。 –

+0

你有沒有嘗試提供絕對路徑,而不是相對路徑(使用'〜')到程序中?另外,可以澄清目前的腳本有什麼問題?注 - nohup很好,它應該工作;你可能希望在末尾附加'&',這樣它將在後臺運行而不是阻塞。最後,請使用更多信息更新問題,而不是將它們發佈在評論中。 –

+0

Ohhh對不起,我只是添加了〜因爲它們都在不同的文件夾,我不想混亂的屏幕:)我想我會嘗試Kerrek的答案。 – ae0709

回答

4

test命令肯定是錯誤的。

只記得"["在bash中是一個命令,而不是語法。它期望字符串"]"作爲最後一個參數。這就是爲什麼前後需要需要。 (分號是好的,因爲它是語法的一部分)

另外,正如Kerrek指出的那樣,比較運算符是-lt而不是lt

+0

謝謝。我也必須編輯文件夾名稱,因爲00 {$ i}並不像我想要的那樣返回00i。但我自己想清楚了。我感謝你的迴應。 – ae0709

1

測試功能需要一個連字符在選項的前面:

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

注意[只是一個普通的命令,通常在/usr/bin/[,並且它必須被對待。

+0

謝謝,但我得到: [aengle @〜] $ ./script.sh ./script.sh:line 5:[0:command not found ./script.sh:line 9:[0:命令未找到 – ae0709

+0

@ aengle1429:對不起,忘了空間! –