'Arrays' i bash script.

Generella Linux-frågor och frågor gällande Linuxmjukvara som saknar egen forumkategori skall postas i detta forum
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
Användarvisningsbild
HUSKii
Tar hemautomation på allvar
Inlägg: 270
Blev medlem: 16 jun 2008, 20:08
Ort: Oskarström

'Arrays' i bash script.

Inlägg av HUSKii »

Är det någon som vet om det på ett enkelt sätt går att 'skriva om' följande perl kod till ett bash script?

Kod: Markera allt

#!/usr/bin/perl

#&ProcessSensor("your device id here", "your device name here");
&ProcessSensor("10.462736010800", "Temperatur ute");
&ProcessSensor("10.3AD85F010800", "Temperatur inne");
&ProcessSensor("10.2D24A3010800", "Temperatur test");
&ProcessSensor("10.76B325010800", "Temperatur test");

sub ProcessSensor
{
      kod för att spara värdena i rrd-databas
}
Tack på förhand.
FredrikS
Tar hemautomation på allvar
Inlägg: 98
Blev medlem: 23 sep 2008, 21:39
Ort: Linköping

Re: 'Arrays' i bash script.

Inlägg av FredrikS »

Kolla på exempelvis
http://daverdave.com/?q=node/16
för att se hur man gör funktioner i bash
Mäter lite saker i huset i Jägarvallen, Linköping, kan beskådas på http://j23.mine.nu
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: 'Arrays' i bash script.

Inlägg av elf98 »

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.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
Användarvisningsbild
HUSKii
Tar hemautomation på allvar
Inlägg: 270
Blev medlem: 16 jun 2008, 20:08
Ort: Oskarström

Re: 'Arrays' i bash script.

Inlägg av HUSKii »

Okej, så det är såpass klurigt med arrayer i shellscript.
Då tror jag att jag försöker lösa det med perl istället.

Det jag vill göra är att i samma script som sparar data i RRD databaserna ska skapa en väldigt enkel tabell baserad html sida där alla temperaturer ska finnas med. Ungefär så som på 'temperatur.nu templogger', där visas alla senaste temperaturer i 'mobile.html'.
Detta hade varit relativt enkelt att lösa i bash script, även för en som inte har så goda kunskaper.
FredrikS
Tar hemautomation på allvar
Inlägg: 98
Blev medlem: 23 sep 2008, 21:39
Ort: Linköping

Re: 'Arrays' i bash script.

Inlägg av FredrikS »

Ska du ändå generera en webbsid är ju perl överlägset bash. Så om du i framiden kanske vill pyssla lite med
dynamiska websidor så skada det inte att lära sig lite mer perl.
Jag skriver nog det mesta i perl, även om jag tidigare hackade ganska mycket bash på jobbet, men jag gillar perl
Mäter lite saker i huset i Jägarvallen, Linköping, kan beskådas på http://j23.mine.nu
Skriv svar