使用 .sh 创建宏

使用 .sh 创建宏

所以我想编写一个脚本,以如下方式使用。

./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

相关内容