Я принимаю ввод как память напр. 10M, или 50G, или 50K
, и я хочу проверить этот большой размер, доступный в файловой системе.
для этого я использую команду df -h
df -Ph . | awk 'NR==2 {print $4}'
Я получаю 140 МБ, и мой ввод может варьироваться, например, 10 КБ, 10 МБ и 10 ГБ
Пример:
мой ввод составляет 20 ГБ, а доступная память в файловая система 140M
Итак, как теперь я могу сравнить эти два размера (50G> 140M?) и результат вывода эха.
преобразовать ваши доступные и входные значения в килобайты и сравнить их ..
#!/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)
Вы также можете использовать -h с sort
Пример
$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:
compare()
{
echo -e "$1 \0 $2" | sort -zh
}