Toon posts:

[bash] variabele verliest waarde buiten loop?!

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb diverse documenten op mijn systeem en om ze allemaal uniek (en manageble te houden) heb ik het volgende systeem gemaakt: een document heeft een vaste prefix, bv CNF (confidentual) en een 4 digit nr (uniek) dus:
CNF-0021 blaat.doc

Het script is helemaal af, afhankelijk van je cmd-line maakt hij hardlinks naar de documenten, of maakt hij een lijst van documenten. Dat laatste is een probleem.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
..
else
    NR=0
      for PREFIX in "CNF PRJ DOC PRV"
      do
            find $SCANDIR -regex '.*/'$PREFIX'-[0-9][0-9][0-9][0-9] .*' -print | while read FILENAME
            do
                DOCNAME=`echo $FILENAME | \
                sed 's/.*\/\(.*\)/\1/g' | \
                awk '{print $0}'`
            DOCNR=`echo $DOCNAME | \
                sed 's/-/ /' | \
                awk '{print $2}'`
            
            if test $NR -le $DOCNR ; then
                NR=$DOCNR
            fi
            echo "$NR - $DOCNAME"
            done
        echo "$NR"
    done

    let NR=$NR+1
    echo -e "\nNext logical Nr:\t\t???-$NR"
fi

Wat is mijn probleem? Ik probeer met NR=$DOCNR steeds de grootste waarde eruit te 'slopen' dat lukt, maar op het moment dat hij aan een nieuwe loop begint, is de waarde weer gereset. Sterker nog, als hij helemaal klaar is met lopen krijg ik als antwoord: NR=1

Wat klopt hier niet...

dezelfde code maar nu "kaal"
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    NR=0
      for PREFIX in "1 2 3 4"
      do
            # een while lus, doet er effe niet toe
            do
docnr=8             
            if test $NR -le $DOCNR ; then
                NR=$DOCNR
            fi
            echo "$NR" # hier zegt ie 8, goed
            done
        echo "$NR" # hier mompelt ie 0
    done

    let NR=$NR+1
    # en hier is NR dus 1

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
nieuwe scope wellicht?

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
Leuk antwoord: wat bedoel je? Bash is geen c++!

Verwijderd

Misschien moet je een export NR doen na de toewijzing om hem globaal te maken?

Verwijderd

Topicstarter
export NR had ik ook al zitten denken, maar de code:
code:
1
export NR=$DOCNR

had niet het gewenste resultaat.

Wacht ik probeer het nog een keer, ietsje anders...
NEE... :,(
code:
1
2
3
4
export NR=0
..
export NR=$DOCNR
..

blijft gewoon resultaat 1 hebben... tsk... Wat is dit voor iets lames?

Verwijderd

Topicstarter
Goed, geen oplossing, maar een workaround gemaakt.
alles in een temp filetje, 'sort' erover... tadaa...

Niet mooi, maar ja... Tijd is geld...

Verwijderd

Heb je het script al eens gerunned met 'set -x' zodat je de toewijzingen gewoon op je scherm ziet?

Verwijderd

Topicstarter
mijn scherm is niet zooo groot :)

stukje ouput:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
++ echo '0025 - PRJ-0025 Document.doc'
++ read FILENAME
+++ echo /network/home/mr-t/Documenten '(Openbaar)/Projecten/PRJ-0024' TRS crpr-manager.doc
+++ sed 's/.*\/\(.*\)/\1/g'
+++ awk '{print $0}'
++ DOCNAME=PRJ-0024 TRS crpr-manager.doc
+++ echo PRJ-0024 TRS crpr-manager.doc
+++ sed 's/-/ /'
+++ awk '{print $2}'
++ DOCNR=0024
++ echo -n .
.++ NR=8
++ echo 8
8
++ echo '0024 - PRJ-0024 TRS crpr-manager.doc'
++ read FILENAME
++ echo 0
0
++ echo
Pagina: 1