[ssfr] Re: [SSFR] Partage de fonctions ...

[ Thread Index | Date Index | More debianworld.org/shellscript-fr Archives ]


>
> Quelles fonctions, concoctees par vos soins, utilisez vous le plus souvent
> ?

A part ça en voilà une en bash qui convertit une taille en octets en quelque 
chose de lisible par un humain (par ex. 2.36Go). Il y'a peut-être plus simple 
mais je me suis bien amusé à l'écrire, c'est le principal. Les noms de 
paramètres sont très mal choisis et peut-être pas évidents.
Attention si vous traduisez ou changez la liste des unités, pensez à changer 
aussi le x"Tb" de la ligne suivante ou c'est la boucle infernale.


# human_size SIZE [BLOCK-SIZE [CEIL [SCALE]]]
#
# SIZE:       une taille en octets
# BLOCK-SIZE: facteur utilisé pour l'unité (1Ko = BLOCK-SIZE octets)
#             defaut=1024
# CEIL:       seuil de changement d'unité pour écrire par exemple .97Mb
#             au lieu de 1000Ko ; defaut=1000
# SCALE:      nombre de décimales du résultat ; defaut=2
#
human_size()
{
    local -i size=$1 block_size=${2:-1024} ceil=${3:-1000} scale=${4:-2}
    local -i factor=1
    local unit

    for unit in B Kb Mb Gb Tb; do
        if [ $size -lt $((ceil*factor)) ] || [ x"$unit" = x"Tb" ]
        then
            [ $factor -ne 1 ] || scale=0
            echo $(echo "scale=$scale; $size/$factor" | bc)"${unit}"
            return
        fi
        factor=$((factor*block_size))
    done
}


-- 
Cédric Lucantis

---


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/