将字符串转换为整数并进行比较

将字符串转换为整数并进行比较

我想获取目录的文件大小(以 MB 为单位),并对不同大小的目录执行不同的操作。我的代码是:

file_size_with_path=$(du -sb $file_path)
file_size=$(echo "$file_size_with_path" | tr -d -c 0-9)
echo "$file_size"
## if directory size is betweem 1GB and 10 GB:
if [[ ($file_size < 10737418240 ) && ($file_size > 1073741824 ) ]]; then   
    echo "yoyo1"
    block_size=$(($file_size/120))
    block_size_in_bytes=$(($block_size*1024))
    stripe_size_in_bytes=$((block_size_in_bytes/4))
## if directory size is greater than 10 GB
elif [[ ($file_size > 10737418240 ) ]] ; then
    echo "yoyo2"
    block_size_in_bytes="67108864"
    stripe_size_in_bytes=$((block_size_in_bytes/4))
##if directory size is less than 1 GB
elif [[ ($file_size < 1073741824 ) ]] ; then
    echo "yoyo3"
    block_size_in_bytes="16777216"
    stripe_size_in_bytes=$((block_size_in_bytes/4))
fi

当对大小为 3318222 的目录执行时,代码会进入第二个 elif 块(即打印 yoyo2),但它应该进入第三个 elif 块并打印 yoyo3。有人请建议如何将字符串转换为整数并进行比较。

我尝试在变量和数字周围加上双引号,但没有成功。我查看了其他答案,但恐怕没有任何效果。

谢谢。

答案1

假设bash这里。

而不是

if [[ ($file_size < 10737418240 ) && ($file_size > 1073741824 ) ]]

你可以使用

if (( file_size < 10737418240 )) && (( file_size > 1073741824 ))

(( ... ))是一种算术计算,其中变量名称将被解释为整数,而运算符<>的作用与通常对整数所做的一样。

[[ $file_size < 10737418240 ]]

您正在按当前语言环境的排序顺序比较两个字符串(根据$LC_COLLATE)。

答案2

在成对使用bash测试时[[ ]],使用-gt-lt进行数字“大于”和“小于”比较。<>用于字符串比较,这[[ 1000000 < 90 ]]确实是正确的。

相关内容