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!
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??
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.
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
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?
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.
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.
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.