shell编程系列5--数学运算

时间:2023-02-26 16:29:41
shell编程系列5--数学运算

方法1 expr $num1 operator $num2
方法2 $(($num1 operator $num2))

expr操作符对照表1
shell编程系列5--数学运算
操作符 含义 num1
| num2 num1不为空且非0,返回num1;否则返回num2 num1 & num2 num1不为空且非0,返回num1;否则返回0 num1 < num2 num1小于num2,返回1;否则返回0 num1 <= num2 num1小于等于num2,返回1;否则返回0 num1 = num2 num1等于num2,返回1;否则返回0 num1 != num2 num1不等于num2,返回1;否则返回0 num1 > num2 num1大于num2,返回1;否则返回0 num1 >= num2 num1大于等于num2,返回1;否则返回0 expr操作符对照表2 shell编程系列5--数学运算 操作符 含义 num1 + num2 求和 num1 - num2 求差 num1 * num2 求积 num1 / num2 求商 num1 % num2 求余数 bash数学运算之expr: # 比较大小,只能对整数进行比较 [root@es01 ~]# num1=30 [root@es01 ~]# num2=50 # 错误:没有加空格 [root@es01 ~]# expr $num1>$num2 [root@es01 ~]# echo $? 0 [root@es01 ~]# echo $num2 50 # 错误:没有转义 [root@es01 ~]# expr $num1 > $num2 # 正确写法 [root@es01 ~]# expr $num1 \> $num2 0 [root@es01 ~]# num1=100 [root@es01 ~]# echo $num1 100 [root@es01 ~]# expr $num1 \> $num2 1 # 小于、小于等于、大于等于 [root@es01 ~]# expr $num1 \< $num2 0 [root@es01 ~]# expr $num1 \<= $num2 0 [root@es01 ~]# expr $num1 \>= $num2 1 # 运算 加、减、乘、除 [root@es01 ~]# num1=17 [root@es01 ~]# num2=5 [root@es01 ~]# expr $num1 + $num2 22 [root@es01 ~]# num3=`expr $num1 + $num2` [root@es01 ~]# echo $num3 22 [root@es01 ~]# expr $num1 - $num2 12 [root@es01 ~]# expr $num1 \* $num2 85 [root@es01 ~]# expr $num1 / $num2 3 # 取余数 [root@es01 ~]# expr $num1 % $num2 2 # 两个小括号的计算方法,要赋值,否则会报错 [root@es01 ~]# $(($num1+$num2)) -bash: 22: command not found [root@es01 ~]# num3=$(($num1+$num2)) [root@es01 ~]# echo $num3 22 [root@es01 ~]# num3=$(($num1*$num2)) [root@es01 ~]# echo $num3 85 [root@es01 ~]# num3=$(($num1-$num2)) [root@es01 ~]# echo $num3 12 [root@es01 ~]# num3=$(($num1/$num2)) [root@es01 ~]# echo $num3 3 # 部分支持,= 不支持 [root@es01 ~]# num3=$(($num1>$num2)) [root@es01 ~]# echo $num3 1 [root@es01 ~]# num3=$(($num1<$num2)) [root@es01 ~]# echo $num3 0 [root@es01 ~]# num3=$(($num1=$num2)) -bash: 17=5: attempted assignment to non-variable (error token is "=5") 在比较运算的时候最好使用expr 练习例子: 提示用户输入一个正整数num,然后计算1+2+3+...+num的值;必须对num是否为正整数做判断,不符合应当运行再次输入 # 判断是否大于0 [root@es01 ~]# num1=56 [root@es01 ~]# expr $num1 \> 0 1 # expr只能对整数进行计算,直接用expr 和一个整数计算获取 $? 的值来判断是否为整数 [root@es01 ~]# num1=56.58 [root@es01 ~]# expr $num1 \> 0 1 [root@es01 ~]# expr $num1 + 1 expr: non-integer argument [root@es01 ~]# echo $? 2 [root@es01 ~]# num1=90 [root@es01 ~]# expr $num1 + 1 91 [root@es01 ~]# echo $? 0 # 具体脚本 # vim 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 # bc介绍 bc是bash内建的运算器,支持浮点数运算 内建变量scale可以设置,默认为0 bc操作符对照表 操作符 含义 num1 + num2 求和 num1 - num2 求差 num1 * num2 求积 num1 / num2 求商 num1 % num2 求余 num1 ^ num2 指数运算 centos7默认没有安装bc命令 yum install -y bc # 交互模式 [root@es01 shell]# bc bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 23 + 5 28 23 - 8 15 23 * 6 138 23 / 5 4 23 % 5 3 # 小数点保留2位 scale=2 23 / 5 4.60 # 小数点保留6位 scale=6 23 / 7 3.285714 # 脚本中使用管道符进行计算 [root@es01 shell]# echo "23+33" | bc 56 [root@es01 shell]# echo "23.3+66" | bc 89.3 # 保留精度 scale=4; 用分号隔开 [root@es01 shell]# echo "scale=4;23.3/3.5" | bc 6.6571 # bc示例脚本 [root@es01 shell]# cat 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" [root@es01 shell]# sh bc.sh num1: 5.6 num2: 3 5.6 / 3 = 1.8666