Создавайте файлы внутри папок с вложенными циклами и массивами - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь создать 2 папки и несколько файлов внутри них.Но он не может создать больше, чем 1-я папка и 1-й файл.Код говорит, что не может создать первую папку, так как она существует.Даже не пытайтесь создавать остальные файлы и папки.

Вот что я попробовал

    #!/bin/bash                                                                                                                                                                                                 

    declare -a arrRel=(rel20 rel21)
    declare -a arrVar=(pt_el pt_mu)
    declare -a arrVarTitle=("electron p_T" "muon p_T")

for i in "${arrRel[@]}"
do
    mkdir "${arrRel[$i]}"
    cd "${arrRel[$i]}"

    for j in "${arrVar[$j]}"
    do
        textFile=text_${arrRel[$i]}_${arrVar[$j]}.txt
        targetDir=Desktop/samples                                                                                                                     

        cat >${textFile} <<EOF
        "some tex"    
EOF                                                                                                                                                                                                         

    done #arrVar                                                                                                                                                                                            

    cd ../ #cd arrRel                                                                                                                                                                                       

done #for loop over releases    

Подводя итог, должно быть 2 папки, rel20 и rel21 и два текстовых файла в обеих.Но я просто получаю папку rel20 и один текстовый файл.

Буду признателен, если вы укажете мне, почему это не работает.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я думаю из того, что вы написали, что он - то, что вы ищете.

#!/bin/bash

declare -a arrRel=(rel20 rel21)
declare -a arrVar=(pt_el pt_mu)
declare -a arrVarTitle=("electron p_T" "muon p_T")

for i in "${arrRel[@]}"
do
    mkdir "$i"
    cd "$i"

    for j in "${arrVar[@]}"
    do
        textFile=text_$i_$j.txt
        targetDir=Desktop/samples                                            

        cat >${textFile} <<EOF
        "some tex"
EOF

    done #arrVar

    cd ../ #cd arrRel

done

Не уверен, каково ваше намерение для arrVarTitle.

0 голосов
/ 23 октября 2018

Вы неправильно индексируете массивы.Честно говоря, массивы не добавляют никакой ценности, и они не стоят путаницы.Просто сделай:

#!/bin/bash                                                                                                                                                                                                 

for i in rel20 rel21; do
    (   # This open paren is important
        mkdir -p $i
        cd $i

        for j in pt_el pt_mu; do
            textFile=text_$i_$j.txt
            targetDir=Desktop/samples                                                                                                                     

            cat >${textFile} <<-EOF
            "some tex"    
            EOF                                                                                                                                                                                                         

        done                                                                                                                                                                                           
    ) # end subshell to recover previous working directory
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...