![将字符串转换为整数并进行比较](https://linux22.com/image/111382/%E5%B0%86%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E6%8D%A2%E4%B8%BA%E6%95%B4%E6%95%B0%E5%B9%B6%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83.png)
我想获取目录的文件大小(以 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 ]]
确实是正确的。