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 循环的所有语法......对不起,如果这是一个如此简单的问题。感谢您的帮助!

编辑(从评论发布更新)

我正在尝试索引一个名为 actor 的目录,其中包含 1000 个包含文件的子目录。java 程序会运行,但它无法处理这 1000 个目录(约 180 万个)中的所有文件。我想编写一个脚本,一次执行子目录。

我正在通过 ssh 进入服务器来执行此操作,但这需要一段时间,所以我希望它不会丢失。我不能只在整个目录上运行 java 程序,因为它耗尽了堆内存。它不是最有效的 java 代码,但是当这个脚本一次运行子目录时,我正在研究另一个解决该问题的方法。

4

2 回答 2

4

测试命令肯定是错误的。

请记住"[",在 bash 中是命令,而不是语法。它期望字符串"]"作为最后一个参数。这就是为什么在它们之前和之后都需要空格。(分号是可以的,因为它是语法的一部分)

此外,正如 Kerrek 指出的那样,比较运算符-lt不是lt.

于 2011-06-24T17:02:09.387 回答
1

测试函数需要在选项前面加一个连字符:

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

请注意,这[只是一个普通命令,通常在 中/usr/bin/[,并且必须这样处理。

于 2011-06-24T16:49:20.180 回答