Avatar billede suulut_sdj Juniormester
12. november 2020 - 20:19 Der er 3 kommentarer

Linux læser ikke tal over 10 korrekt

Jeg har lavet et lille script til komandolinjen på en synology, som kører på linux.
tester ()
{
dom=11; dow=1;
echo "dom = $dom dow = $dow" ;
if [[ "$dom" = "1" ]] ; then echo "fuld backup" ;
elif [[ "$dow" = "1" && "$dom" = "1" ]] ; then echo "ingenting, backup er taget" ;
elif [[ "$dow" = "1" && "$dom" < "7" ]] ; then hours=$((($dom-1)*(24))) && echo "$hours timer decremental" ;
elif [[ "$dow" = "1" && "$dom" > "6" ]] ; then hours=168 && echo "$hours timer decremental" ;

else hours=24 && echo "incremental backup" ; fi
}
Scriptet fungere glimrende når jeg tester det, men ikke når $dom er over 10. Der bliver resultatet denne linle:
elif [[ "$dow" = "1" && "$dom" < "7" ]] ; then hours=$((($dom-1)*(24))) && echo "$hours timer decremental" ;
Som burde være resultatet når $dom er under 7
Håber nogen kan forklare mig hvorfor linux ikke læser tal over 10?
Avatar billede claes57 Ekspert
13. november 2020 - 07:46 #1
Fjern ˚ om tal, når du tester - det er jo ikke en tekst, men et tal...
Avatar billede claes57 Ekspert
13. november 2020 - 07:47 #2
“ ikke ˚
Avatar billede suulut_sdj Juniormester
13. november 2020 - 09:08 #3
Tak for svaret :-)
Har ændret til både:
tester ()
{
echo "dom = $dom dow = $dow" ;
if [[ "$dom" = "1" ]] ; then echo "fuld backup" ;
elif [[ $dow = 1 && $dom > 6 ]] ; then hours=168 && echo "$hours timer decremental" ;
elif [[ $dow = 1 && $dom < 7 ]] ; then hours=$((($dom-1)*(24))) && echo "$hours timer decremental" ;
else hours=24 && echo "incremental backup" ; fi
}
og til
tester ()
{
echo "dom = $dom dow = $dow" ;
if [[ "$dom" = "1" ]] ; then echo "fuld backup" ;
elif [[ "$dow" = 1 && "$dom" > 6 ]] ; then hours=168 && echo "$hours timer decremental" ;
elif [[ "$dow" = 1 && "$dom" < 7 ]] ; then hours=$((($dom-1)*(24))) && echo "$hours timer decremental" ;
else hours=24 && echo "incremental backup" ; fi
}
dvs. ingen "" om selve tallene.
Resultatet er desværre det samme. Det er som om at 11 - 19 bliver læst som 1 og 20-29 bliver læst som 2 osv.
har lige testet denne linje:
dow=1; dom=11;
if [[ $dow = 1 && $dom < 2 ]] ; then echo "sand" ; fi
Den er sand
dow=1; dom=22;
if [[ $dow = 1 && $dom < 3 ]] ; then echo "sand" ; fi
Den er sand
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester