Gå til innhold

Spørsmål om looping i skallskript


Anbefalte innlegg

Jeg har variabler ved navn fra a1 til a20 og b1 til b10 som jeg skal gi som input til kommandoer i en dobbel loop. Hvordan gjør jeg det?

 

Her er en kladd av skriptet:

#!/bin/sh
a1=alternativt.film
a2=alternativt.lyd
a3=avspilling.program
a4=bøker
a5=data-adm.program
a6=diverse
a7=dokumentarer.film
a8=dokumentarer.lyd
a9=langfilmer
a10=lydbøker.anna
a11=lydbøker.romaner
a12=musikk
a13=produktivitet.program
a14=radio
a15=tegneserier
a16=tv-serier

b1=flopp
b2=mein
b3=extra
b4=beyond
b4=winxp

a-loop
rm -rf /var/data/virtuell/a$loop/*
b-loop
/usr/local/ahb/mkln /var/data/fysisk/b$loop/a$loop /var/data/virtuell/a$loop 
b-loopend
a-loopend

 

- du skjønner sikkert hva som skjer inni loopen. mkln lager symbolske linker i katalogen $2 til alle filer i katalogen $1.

 

Jeg kan jo skrive det helt ut, men det er en nokså lite elegant måte å gjøre det på.

 

... ok, så er jeg litt lat i dag :blush:

Endret av arehb
Lenke til kommentar
Videoannonse
Annonse

Hvis du håper at noen skal skrive hele skriptet for deg må du nok satse på noen andre, for jeg liker ikke å gjøre mer enn helt banale ting i bash. Bruker heller python til slike ting, men uansett:

 

Bash støtter visst arrays (selv om jeg aldri har brukt det selv), og syntaksen er er som følger:

 

katalog[1]=bilder
katalog[2]=filmer

echo ${katalog[2]}   # bør skrive ut 'filmer'

 

Alternativt kan man spesifisere filer/kataloger direkte i en for-setning:

 

for katalog in bilder filmer mp3
do
 echo $katalog
done

 

Håper du kan bruke noe av dette videre! Skal prøve å lære meg litt mer bash en dag jeg kjeder meg :)

Lenke til kommentar

Jeg skjønte ærlig talt ikke bæret av hverken det du prøver å gjøre eller det du spør om, men pytt sann.

 

Tar du tipset over og kombinerer det med en

let tall=0
for bla bla
do
 bla bla
 echo $katalog[$tall]
 bla bla bla  
 let tall+=1
done

Så begynner det å ligne ... noe.. etterhvert ;)

 

Edit: syntax feil :blush:

Endret av Cronius
Lenke til kommentar

Takk for tipsa!

 

Her er det ferdige skriptet.

 

# cat mkservertree
#!/bin/sh

for kategori in                 \
                               \
       alternativt.film        \
       alternativt.lyd         \
       avspilling.program      \
       bøker                   \
       data-adm.program        \
       diverse                 \
       dokumentarer.film       \
       dokumentarer.lyd        \
       langfilmer              \
       lydbøker.anna           \
       lydbøker.romaner        \
       musikk                  \
       produktivitet.program   \
       radio                   \
       tegneserier             \
       tv-serier               \

do

       for volum in            \
                               \
               flopp           \
               mein            \
               extra           \
               beyond          \
               winxp           \

       do

/usr/local/ahb/mkln /var/data/fysisk/$volum/$kategori /var/data/virtuell/$kategori

       done

done

 

 

sshahb@pufferfish:/usr/local/ahb# cat mkln
#!/bin/sh
echo $1
echo $2
ls $1 | while read file
               do
               ln -s "$1"/"$file" "$2"
               done

Endret av arehb
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...