shell向上取整

需求

1,向上取整;
2,兼容小数点后为0的情况;
3,兼容负数;


实现

shell bash本身没有向上取整的函数,shell里变量也都当做字符串处理,向上取整需要自己手动写一下。
我本来想在网上找一个通用的实现,但暂时没有找到,于是自己手写了一个:

function ceil(){
     
  floor=`echo "scale=0;$1/1"|bc -l ` # 向下取整
  add=`awk -v num1=$floor -v num2=$1 'BEGIN{print(num1`
  echo `expr $floor  + $add`
}
#下面测试
a=3.5
b=3.0
c=-2.1
echo `ceil $a`
echo `ceil $b`
echo `ceil $c`
4
3
-2

其他不通用方法

网上还有些其他的方法,但坦白说大部分都不够通用,容易出问题:
比如直接把小数点后面的抹掉然后+1的,这种没有考虑小数点后都是0的情况,如

your_var=3.00
echo $((${your_var//.*/+1}))
4

还有的没有考虑负数的情况,如

your_var=-2.1
res=`awk -v a=$your_var 'BEGIN{print(int(a)==(a))?int(a):int(a)+1}'`
echo $res
-1

你可能感兴趣的:(linux)