Portál AbcLinuxu, 15. května 2025 21:55

Dotaz: BASH oprava kodu

21.8.2012 14:51 Joška
BASH oprava kodu
Přečteno: 309×
Odpovědět | Admin
Ahoj, poradí někdo proč mi nefunguje tento kod?
          FILENAME="/tmp/test"

          SIZE=$(du -sb $FILENAME | awk '{ print $1 }')

          if ((SIZE<1024))
          then
               echo "$SIZE B"

          elif ((SIZE<10240))
          then
               echo "(($SIZE/1000)) KB"

          elif ((SIZE<102400))
          then
               echo "(($SIZE/10000)) MB"

          elif ((SIZE<1024000))
          then
               echo "(($SIZE/100000)) GB"

          elif ((SIZE<10240000))
          then
               echo "(($SIZE/1000000)) TB"

          else
               echo ""
          fi

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.8.2012 14:54 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: BASH oprava kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
echo "$(( 1000 / 10 )) vs (( 1000 / 10 ))"
I am always ready to learn although I do not always like to be taught. (W. Churchill)
22.8.2012 07:03 Ash | skóre: 53
Rozbalit Rozbalit vše Re: BASH oprava kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Motáte jednotky, velikost porovnáváte vůči číslu 1024, to je 2^10, ale pak to najednou dělíte číslem 1000, což je 10^3. Asi tušíte, že využití místa se určuje častěji v násobcích 2^n, nikoliv v násobcích 10^n, ale nedotáhl jsem to do konce.

Dále pak předpona kilo označuje násobek 1000 resp. 1024, nikoliv násobek 10, což vám kupodivu nebrání za číslo 1024 záhadně přidávat vždy jednu nulu a porovnávat tak vlastně jen s násobkem deseti, a pak to dělíte opět jen tím tisícem, opět nesmyslně vynásobeným jen deseti.

Totéž pro mega, giga a tera.

Jeden kilobajt je 1024 bajtů, jeden megabajt je 1024 kilobajtů, tedy 1024 x 1024 bajtů etc.

Jednotky jako KiB ponechávám stranou, v tomto případě by to bylo jen jiné označení téhož.
22.8.2012 10:48 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH oprava kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
...
if [[ $SIZE < 1024 ]]
...
If you hold a Unix shell up to your ear, you can you hear the C.
22.8.2012 10:50 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: BASH oprava kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A este...

echo "$((SIZE/1000)) KB"
If you hold a Unix shell up to your ear, you can you hear the C.
22.8.2012 11:06 Kit
Rozbalit Rozbalit vše Re: BASH oprava kodu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možná by bylo praktičtější místo celé parády použít příkaz
du -sh "$FILENAME"
1.9.2012 14:55 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: BASH oprava kodu
:-)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.