如何在bash中运行for循环,这会导致参数扫描?

时间:2019-05-25 04:17:02

标签: python bash

我正在创建一个模拟,其中包含一个世界,其中包含被感染和未被感染的种群。在模拟中,我想使用bash运行参数扫描以查看来自各种输入的所有结果。

python文件“ diseaseSim_bash.py”接受10个命令行参数,并在其中运行:

python3 diseaseSim_bash.py V 100 5 7 7 5 0.05 0.05 0.05 0.05 > simulation1.txt

将使用冯·诺依曼(Von Neumann)社区,100个未感染,5个感染,7x7网格(世界),5个时间步和感染,免疫,死亡和恢复的概率为5%(0.05)进行模拟。

这很好,可以生成我在python文件中创建的图并将其保存在当前文件夹中。它还为不是图像的输出创建文本文件。但是,当我们进行参数扫描时,会遇到一些挑战。

bash文件disease_sweep.sh包含的代码会创建一个带有运行时间戳的文件夹,并将python文件和bash文件复制到该文件夹​​中以进行模拟。它还采用以下命令行参数:

sh disease_sweep.sh 80 120 5 2 20 2 0.02 0.20 0.02

此代码使未感染人口的下限为80,上限为120,以5个人为单位递增。感染人群的下限是2,上限20,步骤2。最后,被感染的概率下限是2%,上限20%,步骤2%。

我在下面插入的块之前有一些代码,这些代码将这些变量用作命令行参数。我不知道是否需要它,所以我现在还没有包括它。该代码还会打印出有关命令行输入的详细信息,即

echo "Bounds for Uninfected and step: " $low_pop $high_pop $step_pop

我没有提供完整代码的原因是因为上面的代码运行良好,并在终端中提供了输出。但是,下一部分似乎没有提供任何结果。

for i in `seq $low_pop $high_pop $step_pop`;
do
    for d in `seq $low_inf $high_inf $step_inf`;
    do
        for x in `seq $low_prob $high_prob $step_prob`;
        do
            echo "Simulation: " $i $d $x
            outfile="Simulation_I"$i"_D"$d"_X"$x".txt"
            python3 diseaseSim_bash.py V $i $d 15 15 5 $x 0.05 0.05 0.05 > $outfile
        done
    done
done

这样做,它应该已经将所有文本数据保存到outfile中,并且图像也应该存在于文件夹中,但是事实并非如此。

我想知道我的for循环中是否有错误,可能是我遇到的问题。感谢您的任何帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

我的man的{​​{1}}页面说:

seq

因此,如果要提供步长,则该宽度必须为 second 参数。在您的代码中,似乎您将它作为最后一个参数。

实际上,SYNOPSIS seq [OPTION]... LAST seq [OPTION]... FIRST LAST seq [OPTION]... FIRST INCREMENT LAST 产生空输出,而seq 2 5 1产生2到5。