Det är tokigt klurigt med arrayer i shellscript. Jag har inte hittat något bra sätt än iaf.
För att hantera "problemet" när jag parsar X antal sensorer på den temperaturlogger jag säljer har jag skrivt följande script. Det är inte hela scriptet, men det är iaf ett exempel på hur jag gjort
Kod: Markera allt
SENSORS=`cat /mnt/config.txt|grep SENSORS=|sed -e s/SENSORS=//|sed -e s/^M$//g`
COUNT=1
while [ $COUNT -le $SENSORS ]; do
#Hämta SENSOR1's id och kontrollera att den existerar
echo S$COUNT
eval S$COUNT=`cat /mnt/config.txt|grep S$COUNT=|sed -e s/S$COUNT=//|sed -e s/^M$//g`
eval S_NAME$COUNT=`cat /mnt/config.txt|grep "S_NAME$COUNT="|sed -e s/"S_NAME$COUNT="//|sed -e s/^M$//g`
eval S_TYPE$COUNT=`cat /mnt/config.txt|grep "S_TYPE$COUNT="|sed -e s/"S_TYPE$COUNT="//|sed -e s/^M$//g`
eval SNAME="\$S_NAME$COUNT"
eval SID="\$S$COUNT"
eval STYPE="\$S_TYPE$COUNT"
if [ ! -d /tmp/1wire/$SID ]; then
echo "SENSOR$COUNT kan inte hittas!"
exit 1
fi
echo $STYPE
if [ "$STYPE" == "TEMP" ]; then
echo "Läser sensor $COUNT - $SNAME (Temperatur)"
eval S_VAL$COUNT=`cat /tmp/1wire/$CACHE/$SID/temperature|sed -e s/" "//g|awk '{$1=$1 + 0.05;printf "%.1f", $1}'`
else
echo "Läser sensor $COUNT - $SNAME (Luftfuktighet)"
eval S_VAL$COUNT=`cat /tmp/1wire/uncached/$SID/HIH4000/humidity|sed -e s/" "//g|awk '{$1=$1 + 0.5;printf "%.0f", $1}'`
fi
eval echo "\$S_VAL$COUNT"
COUNT=`expr $COUNT + 1`
done
Exempel på hur config.txt kan se ut:
Kod: Markera allt
SENSORS=2
S1=10.6A2960010800
S_NAME1=Utetemp....
S_COLOR1=#FF0000
S_TYPE1=TEMP
S2=10.765960010800
S_NAME2=Innetemp...
S_COLOR2=#0000FF
S_TYPE2=TEMP
Antagligen finns det snyggare sätt att lösa det på, men jag har inte hittat det sättet.