如何在shell脚本中将字符串转换为整数?

时间:2017-04-07 09:03:46

标签: shell

我在此路径中的/var/tmp/test/dsk/file.1中有一个4GB的文件。哪一个 我们可以通过Solaris Linux命令看到如下:

-bash-4.4# du -h /var/tmp/test/dsk/file.1 4.0G /var/tmp/test/dsk/file.1

我只想要磁盘大小,所以我做了以下操作。

 disk=`du -h /var/tmp/test/dsk/file.1| awk '{print $1}'|tr -d '.G'`

给出了如下输出:

-bash-4.4# echo $disk 4.0

但我想将此磁盘大小与值50进行比较,首先我需要将上面的输出转换为整数,但我没有做到 那个,任何人都可以帮忙,我已经搜索过但不是  得到确切的解决方案。

1 个答案:

答案 0 :(得分:0)

抱歉,我不知道这里有什么可以探测:) 像bc这样的工具可以接受你提供的任何格式:

[ $(bc <<< "$disk>=50") -eq 1 ]

顺便说一句,您可能希望将人类可读的大小输出转换为简单的数字字节大小,其函数如下:

# Converts human readable sizes into integer kilobyte sizes
# Usage numericSize="$(HumanToNumeric $humanSize)"
function HumanToNumeric {
    local value="${1}"

    local notation
    local suffix
    local suffixPresent
    local multiplier

    notation=(K M G T P E)
    for suffix in "${notation[@]}"; do
        multiplier=$((multiplier+1))
        if [[ "$value" == *"$suffix"* ]]; then
            suffixPresent=$suffix
            break;
        fi
    done

    if [ "$suffixPresent" != "" ]; then
        value=${value%$suffix*}
        value=${value%.*}
        # /1024 since we convert to kilobytes instead of bytes
        value=$((value*(1024**multiplier/1024)))
    else
        value=${value%.*}
    fi

    echo $value
}