como comparar os tamanhos do sistema de arquivos com -h sufixos legíveis em humanos no unix

0

Estou tomando entrada como memória ex. 10M ou 50G ou 50 K

e quero verificar esse tamanho disponível no sistema de arquivos. para isso eu estou usando o comando df -h

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

Estou recebendo 140M e minha entrada pode variar como 10k, 10M e 10G

EX:

minha entrada é 20G e a memória disponível no sistema de arquivos é de 140M

Então, como posso comparar esses dois tamanhos (50G > 140M?) e o resultado da saída de eco.

    
por saidesh 13.01.2017 / 07:55

2 respostas

0

converta seus valores disponíveis e de entrada em Kb e compare-os.

#!/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)
    
por 13.01.2017 / 08:20
1

Você também pode usar -h com classificação

Exemplo

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

Resultado:

50K
10M
140M 
50G 

Explicação:

-h, --human-numeric-sort, compare os números legíveis por humanos (por exemplo, 2K 1G)

Ou dentro de um bash:

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

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

Resultado:

140M <= 50G

Outra maneira de escrever é comparar:

compare()
{
echo -e "$1 
$cat <<EOF | sort -h
50G 
140M 
10M
50K
EOF
$2" | sort -zh }
    
por 13.01.2017 / 08:27