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

2024-10-02 06:21:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

python文件“diseaseSim”_巴什.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文件病_扫描.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循环中是否有一个错误,一些我可能忽略了的东西。感谢您的帮助,谢谢!你知道吗


Tags: 文件代码命令行py文件夹bashfor参数
1条回答
网友
1楼 · 发布于 2024-10-02 06:21:34

我的man页面上的seq是这样写的:

SYNOPSIS
       seq [OPTION]... LAST
       seq [OPTION]... FIRST LAST
       seq [OPTION]... FIRST INCREMENT LAST

因此,如果您想提供一个步长,那么它必须是第二个参数。在您的代码中,似乎您将其作为最后一个参数。你知道吗

实际上,seq 2 5 1生成空输出,seq 2 1 5生成数字2到5。你知道吗

相关问题 更多 >

    热门问题