所以我想编写一个脚本,以如下方式使用。
./MakeMacro 1
该脚本的基本形式如下:
#!/bin/sh
#########################################
## ${1} will be number of particles #####
#########################################
cat > runPgun_${1}_new.mac << +EOF
#Lines of code here
+EOF
在文件(runPgun_${1}_new.mac)中,我想重复这些代码行${1}次:
/gps/source/add 1
/gps/particle/neutron
显然,如果有一个“for”循环,我可以写“.../add 1 ..../add 2 ..../add 3..等”。输入数字决定了我想将这些行添加到代码中的次数。我似乎无法推断出将循环放在哪里。请帮忙!
答案1
根据您现有的代码,我假设您的 .mac 文件不存在,或者(如果存在)您希望将其覆盖。
#!/bin/sh
#########################################
## ${1} will be number of particles #####
#########################################
# If file already exists, delete it.
[ -f runPgun_${1}_new.mac ] && rm runPgun_${1}_new.mac
for PARTICLE in $(seq 1 $1); do
echo /gps/source/add $PARTICLE >> runPgun_${1}_new.mac
echo /gps/particle/neutron >> runPgun_${1}_new.mac
done
我不清楚 neutron 是否应该在每个添加之后运行,还是只在所有添加之后运行。如果只运行一次,请将第二个 echo 移到 之后done
。
结果:
~> ./MakeMacro.sh 5
~> cat runPgun_5_new.mac
/gps/source/add 1
/gps/particle/neutron
/gps/source/add 2
/gps/particle/neutron
/gps/source/add 3
/gps/particle/neutron
/gps/source/add 4
/gps/particle/neutron
/gps/source/add 5
/gps/particle/neutron