基于shell的计算整数计算/浮点数计算/linux取变量绝对值/变量字符串转数字int

已邀请:

浮点数计算:


bash 不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk 处理。
1、bc
#!/bin/bash

#加
f=$(echo "4.3+2.5"|bc)
echo "4.3+2.5=$f"

#减
f=$(echo "4.3-2.5"|bc)
echo "4.3-2.5=$f"

#乘
f=$(echo "4.30*2.50"|bc)
echo "4.3*2.5=$f"

#除
f=$(echo "4.3/2.5"|bc)
echo "4.3/2.5=$f"

#混合运算
f=$(echo "2.2/(2.2-1.1)*2+1.1"|bc)
echo "2.2/(2.2-1.1)*2+1.1=$f"


2、awk
#!/bin/bash

#加
f=$(awk 'BEGIN{print 4.5+3.4 }')
echo "4.5+3.4=$f"

#减
f=$(awk 'BEGIN{print 4.5-3.4 }')
echo "4.5-3.4=$f"

#乘
f=$(awk 'BEGIN{print 4.5*3.4 }')
echo "4.5*3.4=$f"

#除
f=$(awk 'BEGIN{print 4.5/3.4 }')
echo "4.5/3.4=$f"

#混合
f=$(awk 'BEGIN{print (4.5-3.4)*2+3 }')
echo "(4.5-3.4)*2+3=$f"

整数计算


下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例
+加法`expr $a + $b` 结果为 30。
-减法`expr $a - $b` 结果为 -10。
*乘法`expr $a \* $b` 结果为  200。
/除法`expr $b / $a` 结果为 2。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

实例:


ts_ymd=$(date "+%Y%m%d")
ts_ymd=`date +%s -d "$ts_ymd"`

license_time=$(cat /data/tools/projects.list |grep $ser| awk -F " " '{print $34}')
license_time=`date +%s -d "$license_time"`
#left_days=$((${license_time}-${ts_ymd}))
left_days_ts=`expr ${license_time} - ${ts_ymd}`
left_days=$(($left_days_ts/86400))
alter_limit=2592000
#echo "${license_time}-${ts_ymd}=${left_days_ts}"
if [ "$left_days_ts" -lt "$alter_limit" ]
then
sed -i "/$xiangmu/d" $bad_logs
echo "$xiangmu的授权还有:$left_days天到期。" >> $bad_logs
bad_status=1
fi

取绝对值


if [ $abs -lt 0 ]; then
  let abs=0-$abs;
fi  

代码4-2  数学运算实例:\源文件\04\4.4.sh

#!/bin/bash

#4.4.sh

s=0                                    #定义一个求和变量,初值为0。

t=`expr$1**$2`                        #用expr改变运算顺序,求x的y次方。

t=$[t*3]                               #t乘以3。

s=$[s+t]                               #结果相加。

t=$[$1**2]                             #求x的平方。

t=$[t*4]                               #结果乘以4。

s=$[s+t]                               #结果相加。

t=`expr$2*5`                          #求5y的值。

s=$[s+t]                               #结果相加。

s=$[s+6]                               #结果加上6。

echo$s                                #输出结果。

echo$((a%b))                          #取余

【shell】整数运算,小数运算

1.整数运算

【demo01】expr

typeset x=10

typeset y=2

 

n1=`expr $x + $y`

n2=`expr $x  - $y`

n3=`expr $x \* $y`  #使用expr时 符号* 需要转义

n4=`expr $x / $y`

n5=`expr $x % $y`

 

echo n1=$n1,n2=$n2,n3=$n3,n4=$n4,n5=$n5

 

【demo02】小括号

typeset x=10

typeset y=2

 

((n1=$x+$y))

((n2=$x-$y))

((n3=$x*$y))

((n4=$x/$y))

((n5=$x%$y))

 

echo n1=$n1,n2=$n2,n3=$n3,n4=$n4,n5=$n5

 

echo $(($x+$y))

echo $(($x-$y))

echo $(($x*$y))

echo $(($x/$y))

echo $(($x%$y))

 

说明:((n1=$x+$y))  等价于 n1=`expr $x + $y`

 

【demo03】中括号

typeset x=10

typeset y=2

 

echo $[$x+$y]

echo $[$x-$y]

echo $[$x*$y]

echo $[$x/$y]

echo $[$x%$y]

 

 

【demo04】let

typeset x=10

typeset y=2

 

let n1=$x+$y

let n2=$x-$y

let n3=$x*$y

let n4=$x/$y

let n5=$x%$y

 

echo n1=$n1,n2=$n2,n3=$n3,n4=$n4,n5=$n5

 

2.小数运算

【demo01】awk

#!/bin/bash

echo `awk -v x=2.45 -v y=3.123 'BEGIN{printf "%.2f\n",x*y}'`

typeset num=3.123

echo `awk -v x=2.45 -v y=$num 'BEGIN{printf "%.2f\n",x*y}'`

 

说明:awk的变量可以自定义,也可以从外部获取。

 

【demo02】|bc

#!/bin/bash

typeset n1=$(echo "scale=3; 6 / 5" | bc)

typeset n2=`echo "scale=3; 6 / 5" | bc`

 

typeset x=6

typeset y=5

typeset z=1.5

typeset n3=$(echo "scale=3;$x / $y" | bc)

typeset n4=$(echo "scale=3;$z / $y" | bc)

typeset n5=$(echo "scale=3;$x * $y" | bc)

 

echo n1=$n1,n2=$n2,n3=$n3,n4=$n4,n5=$n5

echo"3/2" | bc  #取整

echo"3+2" | bc #快速计算


字符串转数字:echo "96.56"| awk '{print int($0)}'

要回复问题请先登录注册