【问题标题】:Embarrassingly simple bash scripting help令人尴尬的简单 bash 脚本帮助
【发布时间】:2011-06-24 16:47:30
【问题描述】:
#!/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 循环的所有语法......对不起,如果这是一个如此简单的问题。感谢您的帮助!

编辑(从 cmets 发布更新)

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

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

【问题讨论】:

  • 首先,你想做什么?只有这样我们才能说它有什么问题。
  • 您是否尝试过为程序提供绝对路径而不是相对路径(使用~)?另外,能否澄清目前脚本有什么问题?注意 - nohup 很好,它应该可以工作;您可能希望在末尾附加&,以便它在后台运行而不是阻塞。最后,请用更多信息更新问题,而不是在 cmets 中发布。
  • 哦,对不起,我刚刚添加了那些〜,因为它们都在不同的文件夹中,我不想弄乱屏幕:) 我想我会试试 Kerrek 的答案。

标签: bash unix nohup bin


【解决方案1】:

test 命令肯定是错误的。

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

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

【讨论】:

  • 谢谢。我还必须编辑文件夹名称,因为 00{$i} 没有像我想要的那样返回 00i。但我自己想通了。感谢您的回复。
【解决方案2】:

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

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

注意[只是一个普通的命令,一般在/usr/bin/[,必须这样处理。

【讨论】:

  • 谢谢,但我得到:[aengle@ ~]$ ./script.sh ./script.sh:第 5 行:[0:找不到命令 ./script.sh:第 9 行: [0: 找不到命令
  • @aengle1429:抱歉,忘记空格了!
猜你喜欢
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多