Bash-将参数与数字进行比较

Bash-将参数与数字进行比较,bash,if-statement,math,Bash,If Statement,Math,我尝试按大小比较两个文件,并根据比率采取措施: filesize_compressed=$(stat --format=%s "${BASE}_${suffix}.mp4") filesize_original=$(stat --format=%s "${BASE}.mp4") compression_ratio=$(echo "scale=2; ${filesize_original} / ${filesize_compressed}" | bc) if [[ "${compression_r

我尝试按大小比较两个文件,并根据比率采取措施:

filesize_compressed=$(stat --format=%s "${BASE}_${suffix}.mp4")
filesize_original=$(stat --format=%s "${BASE}.mp4")
compression_ratio=$(echo "scale=2; ${filesize_original} / ${filesize_compressed}" | bc)
if [[ "${compression_ratio}" -lt "1.5" ]]; then
#do something
else
#do something else
fi
但不断出现这样的错误:

[[: 1.5: syntax error: invalid arithmetic operator (error token is ".5")
我试着分配

compression_ratio_math=$("${compression_ratio}" | tr -cd '[[:digit:]]')
使用
compression\u ratio\u math
代替
compression\u ratio
,但它也不起作用。 我在这里阅读了每一个主题相似的问题,但没有一个建议的解决方案对我有效。
知道我做错了什么吗?

Bash无法比较点数。但是,
awk
有一个变通方法:

$num=1.5
如果[“y”=“$(echo|awk”(${compression_ratio}>$num){print\“y\”;}”)”;然后
# ... 代码。。。
fi

您也可以使用
bc
,但并非所有un*x发行版都预装了它

您不能在bash中执行此操作,但由于您已经在使用
bc
,因此可以在
bc
的帮助下,在
bash
中直接使用其比较运算符
一种可能的解决方法:

#!/bin/bash

compression_ratio=1.499

if (( $(echo "${compression_ratio} < 1.5" | bc) )); then
    echo "less"
else
    echo "more"
fi
(( $(bc <<< "${compression_ratio} < 1.5") )) && echo "true" ; exit 0

不调用任何外部程序

filesize_compressed=$(stat --format=%s "${BASE}_${suffix}.mp4")
filesize_original=$(stat --format=%s "${BASE}.mp4")

cr100=$(( filesize_original * 100 / filesize_compressed ))  #multiple with 100

if (( cr100 < 150 )); then   #use 150 instead of 1.5 (e.g. also multiple with 100)
#do something
else
#do something else
fi
filesize\u compressed=$(stat--format=%s“${BASE}{u${suffix}.mp4”)
filesize_original=$(stat--format=%s“${BASE}.mp4”)
cr100=$((filesize_original*100/filesize_compressed))#100的倍数
if((cr100<150));然后#使用150而不是1.5(例如,也可以使用100的倍数)
#做点什么
其他的
#做点别的
fi

afaik,bash只有整数运算,所以它不知道如何处理
.5
。您可以缩放计算。例如,将所有内容乘以100,截断任何小数部分,并将结果与150(而不是1.5)进行比较。
bc
并不是预先安装在所有发行版上。下面是我现在得到的错误:/home/user/Scripts/script.sh:line 182:1.11:command not found/home/user/Scripts/Scripts.sh:line 183:=1.5:command not found awk:cmd。行:1:(1.11>){print“y”}awk:cmd。第1行:^语法错误awk:cmd。行:1:(1.11>){print“y”}awk:cmd。行:1:^语法错误