поэтому я хотел бы написать сценарий, который будет использоваться следующим образом.

./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..etc". Номер ввода определяет, сколько раз я хочу, чтобы эти строки были добавлены в код. Я не могу понять, где поставить петлю. Пожалуйста помоги!

1 ответ1

0

Основываясь на существующем коде, я предполагаю, что ваш файл .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

Мне было неясно, должен ли нейтрон запускаться после каждого добавления или только после всех добавлений. Если он должен быть запущен только один раз, перенесите второе эхо на после 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .