Variabler/array - scoop inom samma script? [LÖST]
Postat: 25 mar 2009, 01:58
Jag får inte nedanstående script att fungera. Scriptet ska scanna igenom en rad mappar efter diverse filtyper och först skriva ut antalet filer av respektive typ för varje mapp och sedan skriva ut det totala antalet av varje filtyp. Allt fungerar förutom att variablerna i arrayen som ska summeras inte får några värden och därför inte skrivs ut. Har jag missat något om arrayer eller vad gör jag för fel? Har testat typ alla tänkbara kombinationer av måsvingar/inte måsvingar/citattecken/inte citattecken/osv kring alla variabler. Scriptet är här förkortat/förenklat/rensat för att bespara er onödig kod.
Kod: Markera allt
#!/bin/bash
export PATH=$PATH:/bin/:/usr/bin:/usr/local/bin
# Sökväg till rapportfil
RAPPORTFIL=/Users/jag/Desktop/test/rapport.txt
#Loopar igenom alla mappar i min hemmakatalog
for FOLD in $(ls /Users/jag)
do
#Sökväg till respektive mapp
FOLDPATH=/Users/jag/$FOLD
#Kollar att det är en mapp
if [ -d $FOLDPATH ] ; then
#Skriver ut storleken på mappen
echo \($FOLD\) är totalt $(du -sh $FOLDPATH) >> $RAPPORTFIL
#Nollställer räknare för varje varv i for-loopen
let COUNTER=0
#Sökväg till textfil som innehåller en lista på filtyper jag vill räkna i mapparna
FILTYPER="/Users/jag/Desktop/test/filtyper"
cat ${FILTYPER} | \
#Loopar igenom listan av filtyper och räknar antalet av varje typ i mapparna
while
read FILTYP; do
FILTYPJOKER="*."${FILTYP}
PART2=`find ${FOLDPATH} -iname ${FILTYPJOKER} | wc -l`
#Om det hittas några filer av respektive filtyp skrivs resultatet ut
if [ $PART2 -gt 0 ]; then
PART1="${FOLD} innehåller"
PART3="${FILTYP} i mappen"
echo $PART1 $PART2 $PART3 >>$RAPPORTFIL
#För varje varv i while-loopen adderas antalet filer av en typ till en variabel i en array
let ANTAL[$COUNTER]=${ANTAL[$COUNTER]}+$PART2
let COUNTER=${COUNTER}+1
fi
done
fi
done
#Antalet filer av respektive typ har summerats och ska skrivas ut
echo TOTALT UDDA FILTYPER >> $RAPPORTFIL
let COUNTER=0
#Använder textfilen med filtyper igen för att lopa igenom arrayen och skriva ut summorna
cat ${FILTYPER} | \
while
read FILTYP; do
echo Totalt ${ANTAL[$COUNTER]} ${FILTYP} >> $RAPPORTFIL
let COUNTER=${COUNTER}+1
done