我需要一个帮助在下面她会脚本假设我们有两个变量,它们将动态地获取大小为es kb me gb的值Var1 = 25 mb,它可以是任何大小,以字节、kb、mb或gb为单位Var2 = 1 gb它可以是任何大小,以字节、kb、mb或gb为单位现在我需要比较这些值,如果var1的大小小于var2的大小,则继续,否则输出。请帮助我对bash脚本非常陌生我是新来的shell不知道如何写这个
vlurs2pr1#
匹配前缀,适当相乘。请参见运行在https://ideone.com/YC1ghB的此命令
#!/usr/bin/env bash size_re='^[[:space:]]*([[:digit:]]+)[[:space:]]*([kmg])b?[[:space:]]*$' declare -A multipliers=( [k]=$(( 1024 )) [m]=$(( 1024 * 1024 )) [g]=$(( 1024 * 1024 * 1024 )) ) to_bytes() { result=$1 if [[ $1 =~ $size_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=1G Var1_bytes=$(to_bytes "${Var1,,}") || exit Var2_bytes=$(to_bytes "${Var2,,}") || exit if (( Var1_bytes > Var2_bytes )); then echo "Var1 is larger than Var2" else echo "Var1 is not larger than Var2" fi
1条答案
按热度按时间vlurs2pr1#
匹配前缀,适当相乘。请参见运行在https://ideone.com/YC1ghB的此命令