如何testing一个非整数与如果在bash中

我尝试validation,如果一个数字与小数之间的指定范围内,我的意思是像下面的例子:

rangeA=58.5 rangeB=61.5 number=62.7 if [[ ( "$number" > "$rangeA" | bc ) || ( "$number" = "$rangeA" | bc ) ]] && [[ ( "$number" < "$rangeB" | bc ) || ( "number" = "rangeB" | bc ) ]]; then 

但我卡在这个操作,我会感谢您的帮助,谢谢

Bash的<>比较字符串, -lt-gt比较整数,比较浮点数的唯一方法是把shell放到bc(1) (你这样做,但是你做错了):

 rangeA=58.5 rangeB=61.5 number=62.7 if (( $(bc <<<"$number >= $rangeA && $number <= $rangeB") )); then echo yes else echo no fi 

bc打印1或0到标准输出,bash的算术上下文( ((expression)) )测试它为零,并相应地设置状态码。

你可以使用awk:

 rangeA=58.5 rangeB=61.5 number=62.7 if awk -v number=$number -v rangeA=$rangeA -v rangeB=$rangeB ' BEGIN{exit !(number >= rangeA && number <= rangeB)}' then echo "condition matched" else echo "condition didn't match" fi 

bc可以使用“和”, &&或“or”, ||来对数字进行复杂的测试 ,逻辑。 如果条件为真,则bc 1到stdout。 我们可以使用grep -q 1来测试grep -q 1 ,其中-q选项告诉grep安静,并且在stdout上不产生任何东西:

 if bc <<< "$number >= $rangeA && $number <= $rangeB" | grep -q 1 then echo True else echo False fi 

不知道如果你是一个需求,但你也可以在awk使用三元运算符:

 awk -vn=$number -va=$rangeA -vb=$rangeB \ 'BEGIN{print(n >= a && n <= b)?"yes":"no"}' 

一种隐含的if-else。