在单个脚本中运行多个shell脚本

时间:2013-12-03 16:33:01

标签: bash shell unix

我有50个shell脚本:proc_0.sh,proc_500.sh,proc_1000.sh ... proc_25000.sh。

每个人都在不同的文件上执行相同的操作。

我想在一个主shell脚本中一个接一个地执行所有这些shell脚本。

这是我到目前为止所尝试的内容:

#!/bin/bash/

cd $(pwd)

i=0

for i in {0..25000..500}
do
     chmod +x proc_${i}.sh
     bash proc_${i}.sh
done

exit

现在,我不确定这一点,但似乎这些脚本并行运行或以某种方式混淆。我这样说是因为当我单独运行这些脚本中的一些时,它们会给出正确的结果,但不能以上述方式运行。也可能是这些脚本正在执行的程序存在问题。

那么,有人可以告诉我这是否是一个接一个地运行多个shell脚本的正确方法?这将有助于我缩小问题范围。

由于

1 个答案:

答案 0 :(得分:5)

不,你这样做有点乱。

#!/bin/bash/

删除最后一个斜线或不起作用

cd $(pwd)

这与当前目录中的cd . .cd相同是伪造的。从脚本中删除它。

i=0

你也可以删除它:接下来是一个已经初始化$ i的for循环

 chmod +x proc_${i}.sh

每次运行此脚本时,都会显式设置执行标志。它没有坏处但只要一次就足够了。

bash proc_${i}.sh

您不需要使用“bash”语句。无论如何,它都不会运行,因为您忘记了命令的路径。除非您从/ usr / local / bin之类的目录运行此命令:始终使用路径!

不,您的脚本并行运行。你忘了背景了。

试试这个:

#!/bin/bash

for i in {0..25000..500}
do
     /path/to/proc_${i}.sh &   #<- don't forget to replace "/path/to" with the
done                           #   real directory where the proc_ files reside

wait

这将使您的计算机一次充满50个进程。

运行top以查看它们正在运行。

最好只将所有这些proc脚本放在一个子目录中,然后运行:

#!/bin/bash

for i in "/path/to/procscripts/"*
do
    "$i" &
done

wait

这将使自己更灵活,更轻松。

此外,使所有脚本都可执行起来可能更容易:

chmod a+x "/path/to/procscripts/"*