Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[BASH] Variabele variabel

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb in een script een aantal parameters ingesteld staan die meerdere keren kunnen voorkomen.
Hieronder bijvoorbeeld 2 index bestanden. Die wil ik vervolgens bijv. verwijderen, nu weet ik aan de hand van NUMHOSTS hoeveel er zijn en wil ik die doorlopen via een for-loop.
Nu heb ik geprobeerd om middels $i het juiste getal van de variabel te gebruiken maar nu echoed hij uit eindelijk $H1_IDXFILE ipv /tmp/abcdef.idx

Hoe kan ik dit goed krijgen?

code:
1
2
3
4
5
6
7
8
9
10
H1_IDXFILE="/tmp/abcdef.idx"
H2_IDXFILE="/tmp/testtest.idx"
NUMHOSTS=2

for((i=1;i<=$NUMHOSTS;i+=1)); do
        RMCMD="rm \$H#HOST_IDXFILE"
        RM=`echo $RMCMD | sed "s\#HOST\\\\$i\g"`
        echo $RM
        $RM
done


Ik vond via de search een topic met eenzelfde vraag maar helaas zonder antwoord ( http://gathering.tweakers.net/forum/list_messages/116615/ )

[ Voor 18% gewijzigd door Verwijderd op 02-01-2008 19:32 ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Kun je niet gewoon beter een array gebruiken en die doorlopen met je loopje?

[ Voor 4% gewijzigd door Osiris op 02-01-2008 19:41 ]


Verwijderd

Topicstarter
Er zijn nog meer parameters die met 'H1_' beginnen.
Bijv. H1_DIFIDX, H1_ID, H1_LOG, etc

Dan zou ik per 'Hx_' een array moeten maken maar uiteindelijk krijg ik dan toch weer hetzelfde probleem wanneer er meerdere array's zijn.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:52

Creepy

Tactical Espionage Splatterer

Ik snap eerlijk gezegd niet waarom je geen array zou kunnen gebruiken, of desnoods een array per parameter die je nodig hebt (DIFIDX, ID, LOG etc).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Bash:
1
2
3
4
5
6
7
8
9
10
H1_IDXFILE="/tmp/abcdef.idx"
H2_IDXFILE="/tmp/testtest.idx"
NUMHOSTS=2

for((i=1;i<=$NUMHOSTS;i+=1)); do
        RMCMD="H${i}_IDXFILE"
        RM=`echo rm $$RMCMD | sed "s\#HOST\\\\$i\g"`
        echo $RM
        $RM
done


Eenvoudiger is:
Bash:
1
2
3
4
5
6
7
FILES="
/tmp/idx_file1
/tmp/idx_file2
/tmp/idx_file8
"

for FILE in $FILES; do rm ${FILE}; done


Heb je meerdere parameters per 'entry' nodig dan vind ik persoonlijk een los bestandje het gemakkelijkst waarbij de parameters dmv een whitespace (spatie(s) en/of tab) gescheiden worden
program.conf:
#P1   P2   P3
1    2    3
11   12     13
21   22     23


Welke je eenvoudig kunt inlezen dmv:
Bash:
1
2
3
4
5
6
7
8
9
10
cat program.conf | while read P1 P2 P3
do
    # Skip comments and empty lines
    [ -z "$P1" ] && continue
    [ "${P1:0:1}" = "#" ] && continue

   echo "Argument 1:   ${P1}"
   echo "Argument 2:   ${P2}"
   echo "Argument 3:   ${P3}"
done


Hopelijk kun je hiermee verder..

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
Bedankt voor de reacties.
Ik heb het opgelost op de manier zoals Creepy aangaf, een array per parameter.

code:
1
2
3
4
5
6
7
8
IDXFILE[1]="/tmp/zxcv.idx"
IDXFILE[2]="/tmp/asdf.idx"
IDXFILE[3]="/tmp/qwer.idx"

for((i=1;i<=${#IDXFILE[*]};i+=1)); do
        rm ${IDXFILE[i]}
        touch ${IDXFILE[i]}
done
Pagina: 1