fork download
  1. #!/usr/bin/env bash
  2. set -x
  3.  
  4. space_re='^([[:digit:]]+) ?([kmg]b)$'
  5.  
  6. declare -A multipliers=(
  7. [kb]=$(( 1024 ))
  8. [mb]=$(( 1024 * 1024 ))
  9. [gb]=$(( 1024 * 1024 * 1024 ))
  10. )
  11.  
  12. to_bytes() {
  13. result=$1
  14. if [[ $1 =~ $space_re ]] && { units=${BASH_REMATCH[2]}; [[ $units && ${multipliers[$units]} ]]; }; then
  15. result=$(( ${BASH_REMATCH[1]} * ${multipliers[${BASH_REMATCH[2]}]} ))
  16. elif (( $1 )); then
  17. result=$(( $1 ))
  18. else
  19. echo "ERROR: $1 could not be parsed as a number" >&2
  20. return 1
  21. fi
  22. echo "$result"
  23. }
  24.  
  25. Var1='25 mb'
  26. Var2='1 gb'
  27. if (( $(to_bytes "$Var1") > $(to_bytes "$Var2") )); then
  28. echo "Var1 is larger than Var2"
  29. else
  30. echo "Var1 is not larger than Var2"
  31. fi
  32.  
Success #stdin #stdout #stderr 0.01s 5424KB
stdin
Standard input is empty
stdout
Var1 is not larger than Var2
stderr
+ space_re='^([[:digit:]]+) ?([kmg]b)$'
+ multipliers=([kb]=$(( 1024 )) [mb]=$(( 1024 * 1024 )) [gb]=$(( 1024 * 1024 * 1024 )))
+ declare -A multipliers
+ Var1='25 mb'
+ Var2='1 gb'
++ to_bytes '25 mb'
++ result='25 mb'
++ [[ 25 mb =~ ^([[:digit:]]+) ?([kmg]b)$ ]]
++ units=mb
++ [[ -n mb ]]
++ [[ -n 1048576 ]]
++ result=26214400
++ echo 26214400
++ to_bytes '1 gb'
++ result='1 gb'
++ [[ 1 gb =~ ^([[:digit:]]+) ?([kmg]b)$ ]]
++ units=gb
++ [[ -n gb ]]
++ [[ -n 1073741824 ]]
++ result=1073741824
++ echo 1073741824
+ ((  26214400 > 1073741824  ))
+ echo 'Var1 is not larger than Var2'