https://my.oops.org/201

디스크 크기나 네트워크 전송 대역폭 등을 단위대로 보기 좋게 하기 위한 코드를 살펴보겠습니다. C나 여러 언어로 많이 있으나, bash 로는 딱히 마음에 드는 코드가 없어 만들어 보았습니다.

HUMANREADABLE_SIZE_SUFFIX=( "B" "KB" "MB" "GB" "TB" )# HUMANREADABLE_SIZE req_size base_suffixfunction HUMANREADABLE_SIZE {
    local suffix=${2:-0}
    local size=$1
    local isize=${size}

    while [ 1 ]
    do
        (( isize < 1024 )) && break
        size="$( bc <<< "scale = 2; ${size} / 1024" )"
        isize=${size%%.*}
        let "suffix += 1"
    done

    echo "${size} ${HUMANREADABLE_SIZE_SUFFIX[suffix]}"}

사용법은 간단합니다.

HUMANREADABLE_SIZE 입력_숫자 입력단위(0-B,1-KB,2-MB,3-GB)

[root@host ~]# # convert 1024 B[root@host ~]# HUMANREADABLE_SIZE 10241KB[root@host ~]# # convert 1024 KB[root@host ~]# HUMANREADABLE_SIZE 1024 11MB[root@host ~]# # convert 1024 MB[root@host ~]# HUMANREADABLE_SIZE 1024 21GB[root@host ~]# # convert 1024 GB[root@host ~]# HUMANREADABLE_SIZE 1024 31TB

변환 값을 변수로 받고 싶다면 다음과 같이 할 수 있습니다.

[root@host ~]# SIZE=$( HUMANREADABLE_SIZE 1024 3 )[root@host ~]# echo -n ${SIZE} # newline 이 없어야 할 경우..