shell 数学运算
数学运算之 expr
expr操作符对照表
比较大小,只能对整数进行比较,需要加空格,linux 保留关键字要转义
num1=30 num2=50 expr $num1 \> $num2
查看上一条命令有没有执行成功
echo $?
返回0 成功,其他失败
小于、小于等于、大于等于
expr $num1 \< $num2 expr $num1 \<= $num2 expr $num1 \>= $num2
运算 加、减、乘、除
# 加 num1=17 num2=5 expr $num1 + $num2 # 减 num3=`expr $num1 + $num2` echo $num3 expr $num1 - $num2 # 乘 expr $num1 \* $num2 expr $num1 / $num2 # 取余数 expr $num1 % $num2
需要注意事项:
两个小括号的计算方法,要赋值,否则会报错
# 直接输出报错 $(($num1+$num2)) # 需要赋值给一个变量 num3=$(($num1+$num2)) echo $num3 num3=$(($num1*$num2)) echo $num3 num3=$(($num1-$num2)) echo $num3 num3=$(($num1/$num2)) echo $num3
一些操作符在$(()) 不支持, 在比较运算的时候最好使用expr
num1=5 num2=5 num3=$(($num1=$num2))
expr $num1 = $num2
练习例子
提示用户输入一个正整数num,然后计算1+2+3+...+num的值;必须对num是否为正整数做判断,不符合应当运行再次输入
判断是否是一个正整数
思路:
- expr只能对整数进行计算,直接用expr 和一个整数计算获取 $? 的值来判断是否为整数
- 在使用 expr $num1 \> 0 判断是否大于0
# 不是整数使用 expr 进行数学运算会出错 num1=56.58 expr $num1 + 1
sum.sh
#!/bin/bash # while true do read -p "please input a positive number: " num # 判断数是否是整数 expr $num + 1 &> /dev/null if [ $? -eq 0 ];then # 判断这个整数是否大于0,大于0返回1 if [ `expr $num \> 0` -eq 1 ];then #echo "yes,positive number" # $sum没有赋值,默认为0 for((i=1;i<=$num;i++)) do sum=`expr $sum + $i` done echo "1+2+3+...+$num = $sum" # 执行计算需要退出 exit fi fi echo "error,input enlegal" continue done
执行脚本
sh sum.sh
shell 运算之 bc
bc 介绍:
- bc 是bash内建的运算器,支持浮点数运算
- 内建变量scale可以设置,默认为 0
bc 操作符对照表
交互测试
脚本中使用管道符进行计算
echo "23+33" | bc
保留精度 scale=4; 用分号隔开
echo "scale=4;23.3/3.5" | bc
bc示例脚本
bc.sh
#!/bin/bash # read -p "num1: " num1 read -p "num2: " num2 #echo "scale=4;$num1/$num2" | bc num3=`echo "scale=4;$num1/$num2" | bc` echo "$num1 / $num2 = $num3"
执行
sh bc.sh