如何在 unix 中将文件系统大小与 -h 人类可读后缀进行比较

如何在 unix 中将文件系统大小与 -h 人类可读后缀进行比较

我将输入作为记忆前。 10M或50G或50K

我想检查文件系统中可用的大小。为此我正在使用df -h命令

df -Ph . | awk 'NR==2 {print $4}' 

我得到 140M,我的输入可能会有所不同,如 10k 、 10M 和 10G

前任:

我的输入是20G,文件系统中的可用内存是140M

那么现在我如何比较这两个大小(50G > 140M?)和回显输出结果。

答案1

您还可以将 -h 与排序一起使用

例子

$cat <<EOF | sort -h
50G 
140M 
10M
50K
EOF

结果 :

50K
10M
140M 
50G 

解释:

-h, -- human-numeric-sort,比较人类可读的数字(例如,2K 1G)

或者在 bash 中:

compare()
{
cat <<EOF | sort -h
$1
$2
EOF
}

set $(compare 50G 140M)
echo "$1 <= $2"

结果:

140M <= 50G

另一种编写比较的方法:

compare()
{
echo -e "$1 \0 $2" | sort -zh
}

答案2

将您的可用值和输入值转换为 Kb 并进行比较。

#!/bin/bash

echo -n "Enter the value ( value should end with G/M/K): "
read DISK_VALUE

AVAILABLE_SPACE=$(df -h . | awk 'NR==2{print $4}')
AVAILABLE_SPACE_IN_KB=$(echo "${AVAILABLE_SPACE}" | awk '/M$/{print ($0+0)*1024}/G$/{print ($0+0)*1024*1024}/K$/{print $0+0}')
COMPARE_VALUE_IN_KB=$(echo "${DISK_VALUE}" | awk '/M$/{print ($0+0)*1024}/G$/{print ($0+0)*1024*1024}/K$/{print $0+0}')

echo "AVAILABLE_SPACE_IN_KB : ${AVAILABLE_SPACE_IN_KB}"
echo "COMPARE_VALUE_IN_KB : ${COMPARE_VALUE_IN_KB}"

if [ "${AVAILABLE_SPACE_IN_KB}" -lt "${COMPARE_VALUE_IN_KB}" ]
then
        echo "Available space (${AVAILABLE_SPACE}) is lesser than Given Value (${DISK_VALUE})"
else
        echo "Available space (${AVAILABLE_SPACE}) is greater than Given Value (${DISK_VALUE})"
fi

$ bash a.sh
Enter the value : 1000K
AVAILABLE_SPACE_IN_KB : 100
COMPARE_VALUE_IN_KB : 1000
Available space (100K) is lesser than Given Value (1000K)

$ bash a.sh
Enter the value : 101M
AVAILABLE_SPACE_IN_KB : 102400
COMPARE_VALUE_IN_KB : 103424
Available space (100M) is lesser than Given Value (101M)

相关内容