shell中的数学运算

一、shell中支持的算术

算术运算符说明/含义
+、-加法(或正号)、减法(或负号)
*、/、%乘法、除法、取余(取模)
**幂运算
++、–自增和自减,可以放在变量的前面也可以放在变量的后面
!、&&、||逻辑非(取反)、逻辑与(and)、逻辑或(or)
<、<=、>、>=比较符号(小于、小于等于、大于、大于等于)
==、!=、=比较符号(相等、不相等;对于字符串,= 也可以表示相当于)
<<、>>向左移位、向右移位
~、|、 &、^按位取反、按位或、按位与、按位异或
=、+=、-=、*=、/=、%=赋值运算符,例如 a+=1 相当于 a=a+1,a-=1 相当于 a=a-1

二、shell中数学计算方式

运算操作符说明
(( ))用于整数运算,效率很高,推荐使用
let用于整数运算,和 (()) 类似。
$[]用于整数运算,不如 (()) 灵活。
expr可用于整数运算,也可以处理字符串。比较麻烦,需要注意各种细节,不推荐使用。
bcLinux下的一个计算器程序,可以处理整数和小数。Shell 本身只支持整数运算,想计算小数就得使用 bc 这个外部的计算器。

1、(()) 用法

用法:((表达式1,表达式2,....))

只用于整数运算,表达式可以有一个或多个,也可以使用$(())来获取运算结果

示例:

[root@localhost ~]#  ((1+2+3))
[root@localhost ~]#  ((a=1+2+3))
[root@localhost ~]# echo $a
6
[root@localhost ~]# echo $((1>2))
0
[root@localhost ~]# echo $((2/3+2))
2
[root@localhost ~]# a=$((1>2||4<5))
[root@localhost ~]# echo $a
1
[root@localhost ~]# ((a=1+2+3,b=3+4+5))
[root@localhost ~]# echo $a $b
6 12
[root@localhost ~]# a=$((4*5))
[root@localhost ~]# echo $a
20

2、bc用法

bc 命令是任意精度计算器语言,通常在linux下当计算器用。

(0)bc计算器内置变量/函数

变量名作 用
scale指定精度,也即小数点后的位数;默认为 0,也即不使用小数部分。示例:scale=5,设置精度为小数点后5位
ibase指定输入的数字的进制,默认为十进制。示例:ibase=2,设置输入的数字为二进制
obase指定输出的数字的进制,默认为十进制。示例:obase=8,设置计算结果输出为八进制

内置函数,使用时要在打开bc计算器后加-l参数,表示启用数学库

函数名作用
s(x)计算 x 的正弦值,x 是弧度值。
c(x)计算 x 的余弦值,x 是弧度值。
a(x)计算 x 的反正切值,返回弧度值。
l(x)计算 x 的自然对数。
e(x)求 e 的 x 次方。
j(n, x)贝塞尔函数,计算从 n 到 x 的阶数。
[root@localhost ~]# bc -l			#加-l表示启用数学库
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'.
s(10)
-.54402111088936981340
a=10
e(a)
22026.46579480671651695790

(1)终端交互使用bc计算器

在命令行直接输入bc即可进入到计算器

[root@localhost ~]# 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'.
1+2+3		#计算表达式1+2+3的值
6			#计算结果
2*2.5
5.0
2/2.5
0
1/3
0
n=1+2+3		#将表达式的值给n
n			#输出n的值
6
n++			#n自增
6
n
7	
scale=5		#设置精度5
1/3
.33333
10/3
3.33333
scale=2		#设置精度2
10/3
3.33
ibase=2		#设置输入数字为2进制
1+10001+1
19
ibase=10	#设置输入数字为10进制
obase=2		#设置输出数字为2进制
1+2+3*2
1001
1+2+3*2.5
1010.1000

(3)shell中使用bc计算器

借助管道符|使用bc计算器

用法1:直接输出结果echo "计算表达式" | bc

用法2:结果赋给变量var=$(echo "表达式" | bc)var=`echo "表达式"|bc`

[root@localhost ~]# echo "1+2*3"|bc
7
[root@localhost ~]# echo "(8+2)/10"|bc
1
[root@localhost ~]# echo "(8+2)/3"|bc
3
[root@localhost ~]# echo "scale=5;(8+2)/3"|bc	#设置输出精度5
3.33333
[root@localhost ~]# echo "scale=5;a=10;a/3"|bc
3.33333
[root@localhost ~]# echo "ibase=8;obase=2;a=10;a"|bc	#将八进制10转换成二进制
1000
[root@localhost ~]# a=$(echo "1+2+3"|bc)		#将计算结果赋给a
[root@localhost ~]# echo $a
6
[root@localhost ~]# a=$(echo "s(10)"|bc -l)		#使用数学库sin(10)
[root@localhost ~]# echo $a
-.54402111088936981340
[root@localhost ~]# i=`echo "1*2"|bc`
[root@localhost ~]# echo $i
2
[root@localhost ~]#

也可以参考这里:https://blog.csdn.net/qq_43469158/article/details/114789485

三、案例

kfc点餐系统
在这里插入图片描述
在这里插入图片描述

#!/bin/bash
clear

kl=9.9
jc=12.3
hb=19.9

echo "-------------------------------------------------"
echo -e "|\t\t Welecome to KFC\t\t|"
echo "-------------------------------------------------"
echo -e "|今天KFC提供的菜品有:\t\t\t\t|"
echo -e "|\t1)可乐\t\t\t\t\t|\n|\t2)鸡翅\t\t\t\t\t|\n|\t3)汉堡\t\t\t\t\t|"

echo -e "|请输入你要购买的数量:\t\t\t\t|"
echo "-------------------------------------------------"
read -p "可乐:" numkele
read -p "鸡翅:" numjichi
read -p "汉堡:" numhanbao

sum=`echo "scale=2;$kl*$numkele+$jc*$numjichi+$hb*$numhanbao"|bc`

read -p "合计:$sum元 请付款: " usermoney

clear

echo -e "\t\tKFC结算单\t\t"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo -e "商品\t单价\t数量\t合计"

echo -e "可乐\t$kl\t$numkele\t`echo "scale=2;$kl*$numkele"|bc`"
echo -e "鸡翅\t$jc\t$numjichi\t`echo "scale=2;$jc*$numjichi"|bc`"
echo -e "汉堡\t$hb\t$numhanbao\t`echo "scale=2;$hb*$numhanbao"|bc`"

echo -e "\n总计:$sum"
echo "支付:$usermoney"
echo "找零:`echo "scale=2;$usermoney-$sum"|bc`"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "地址:陕西省西安市西三环28号KFC "
echo "联系电话:400-689-3400"
echo "www.kfc.com更多优惠等你来拿"

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值