#!/usr/bin/env bash
set -x
space_re='^([[:digit:]]+) ?([kmg]b)$'
declare -A multipliers=(
[kb]=$(( 1024 ))
[mb]=$(( 1024 * 1024 ))
[gb]=$(( 1024 * 1024 * 1024 ))
)
to_bytes() {
result=$1
if [[ $1 =~ $space_re ]] && { units=${BASH_REMATCH[2]}; [[ $units && ${multipliers[$units]} ]]; }; then
result=$(( ${BASH_REMATCH[1]} * ${multipliers[${BASH_REMATCH[2]}]} ))
elif (( $1 )); then
result=$(( $1 ))
else
echo "ERROR: $1 could not be parsed as a number" >&2
return 1
fi
echo "$result"
}
Var1='25 mb'
Var2='1 gb'
if (( $(to_bytes "$Var1") > $(to_bytes "$Var2") )); then
echo "Var1 is larger than Var2"
else
echo "Var1 is not larger than Var2"
fi
IyEvdXNyL2Jpbi9lbnYgYmFzaApzZXQgLXgKCnNwYWNlX3JlPSdeKFtbOmRpZ2l0Ol1dKykgPyhba21nXWIpJCcKCmRlY2xhcmUgLUEgbXVsdGlwbGllcnM9KAogIFtrYl09JCgoIDEwMjQgKSkKICBbbWJdPSQoKCAxMDI0ICogMTAyNCApKQogIFtnYl09JCgoIDEwMjQgKiAxMDI0ICogMTAyNCApKQopCgp0b19ieXRlcygpIHsKICByZXN1bHQ9JDEKICBpZiBbWyAkMSA9fiAkc3BhY2VfcmUgXV0gJiYgeyB1bml0cz0ke0JBU0hfUkVNQVRDSFsyXX07IFtbICR1bml0cyAmJiAke211bHRpcGxpZXJzWyR1bml0c119IF1dOyB9OyB0aGVuCiAgICByZXN1bHQ9JCgoICR7QkFTSF9SRU1BVENIWzFdfSAqICR7bXVsdGlwbGllcnNbJHtCQVNIX1JFTUFUQ0hbMl19XX0gKSkKICBlbGlmICgoICQxICkpOyB0aGVuCiAgICByZXN1bHQ9JCgoICQxICkpCiAgZWxzZQogICAgZWNobyAiRVJST1I6ICQxIGNvdWxkIG5vdCBiZSBwYXJzZWQgYXMgYSBudW1iZXIiID4mMgogICAgcmV0dXJuIDEKICBmaQogIGVjaG8gIiRyZXN1bHQiCn0KClZhcjE9JzI1IG1iJwpWYXIyPScxIGdiJwppZiAoKCAkKHRvX2J5dGVzICIkVmFyMSIpID4gJCh0b19ieXRlcyAiJFZhcjIiKSApKTsgdGhlbgogIGVjaG8gIlZhcjEgaXMgbGFyZ2VyIHRoYW4gVmFyMiIKZWxzZQogIGVjaG8gIlZhcjEgaXMgbm90IGxhcmdlciB0aGFuIFZhcjIiCmZpCg==