Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

-gt -lt -eq???

Jag försöker få följande rader i ett script att fungera:

#/bin/bash
htemp= cat /mnt/1wire/hobbyrummet/temperature | sed -e 's/^[ \t]*//'
echo $htemp
limit=20
if [ $htemp -gt $limit ]
then echo "större"
else
echo "mindre"
fi

men får följande felmeddelande:

18.5
[: 12: -gt: unexpected operator
mindre
 

Hur jag än letar så ser jag att -gt ska användas för att jämföra (greater than)

Vad har jag missta??

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

FoHs bild

Första raden är fel. Det ska vara #!/bin/bash (dvs saknas ett utropstecken).

Tilldelningen av htemp är fel. Du tilldelar den en text och inte ett värde. Ditt test blir med andra ord:

if [ cat /mnt/1wire/hobbyrummet/temperature | sed -e 's/^[ \t]*//' -gt 20 ]

Ändra till htemp=$(cat /mnt/1wire/hobbyrummet/temperature | sed -e 's/^[ \t]*//')

$() innebär att uttrycket utvärderas.

Edit: Som du förstår så utvärderas ju kommandot du tilldelat htemp när du kör echo på den, och därför framstår tilldelningen som korrekt.

tufftuffs bild

Variablerna är alltid text, så det är inte det som är fel. Men bash räknar bara med heltal, så "18.5" kan inte tolkas som ett tal. Min version av bash säger:

rad 5: [: 18.5: heltalsuttryck förväntades

FoHs bild

Ja, de är alltid text men i det här fallet blev ju texten hela uttrycket i och med att det inte utvärderades vid tilldelningen, eller hur? Smile

Edit: Det var alltså "uttrycket" jag syftade på när jag skrev "text", vilket jag kan hålla med om var lite otydligt men det borde ju framgått i och med förklaringen efter. Du kan ju testa med htemp= echo "23" så får du samma fel trots att det är ett heltal. Skriver du htemp=$(echo "23") så fungerar det.

tufftuffs bild

Jodå, du har så rätt så. Jag var också otydlig. Men snoopy tycks ju har rett ut det hela ändå, och det är ju huvudsaken. Smile

snoopys bild

Jaha, så fungerar det. Lite fixande och med er hjälp ser det ut så här;

#!/bin/bash
htemp=$(cat /mnt/1wire/hobbyrummet/temperature | awk '{printf "%.0f\n", $1}')
limit=20
if [ $htemp -gt $limit ]
then echo "större"
else
echo "mindre"
fi

och jag blir glad! Jag tackar för lektionen. Smile

 

Det är spritens fel att vi skjuter på svärmor..... och det är spritens fel att vi missar...