Смущающе простая помощь bash-скриптинга - PullRequest
1 голос
/ 24 июня 2011
#!/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 этот скрипт так, как он написан, или мне нужно удалить nohup в операторах if-else?Я действительно не знаю весь синтаксис if-else и циклов for bash ... извините, если это такой простой вопрос.Я благодарен за помощь!

Редактировать (публикуя обновление из комментариев)

Я пытаюсь проиндексировать каталог с именем актеров, содержащий 1000 подкаталогов с файлами внутри.Java-программа будет работать, но она не сможет обработать все файлы в этих 1000 каталогах (около 1,8 миллиона).Я хочу написать скрипт, который будет делать это в подкаталоге за раз.

Я ssh'ing на сервер, чтобы сделать это, но это займет некоторое время, поэтому я хочу, чтобы он не отбрасывался.Я не могу просто запустить java-программу для всего каталога, потому что она исчерпывает кучу памяти.Это не самый эффективный код Java, но я работаю над другим решением этой проблемы, пока этот скрипт запускает подкаталог за раз.

Ответы [ 2 ]

4 голосов
/ 24 июня 2011

Команда test определенно неверна.

Просто запомните, "[" в bash - это команда, а не синтаксис.Ожидается строка "]" в качестве последнего аргумента.Вот почему пробелы требуются до и после них.(Точка с запятой в порядке, потому что она является частью синтаксиса)

Также, как указал Керрек, оператором сравнения является -lt, а не lt.

1 голос
/ 24 июня 2011

Для функций тестирования требуется дефис перед опцией:

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

Обратите внимание, что [ - это обычная команда, обычно в /usr/bin/[, и она должна рассматриваться как таковая.

...